Codeforces 294E Shaass the Great
树形DP。由于n只有5000,可以直接枚举边。
枚举边,将树分成两个子树,然后从每个子树中选出一个点分别为u,v,那么答案就是:
子树1中任意两点距离总和+子树2中任意两点距离总和+子树1中任意一点到u的距离和*子树2的节点个数+子树2中任意一点到v的距离和*子树1的节点个数+子树1的节点个数*子树2的节点个数*当前枚举边的权值。
当枚举的边一定时,那么要选取的点就是子树中到所有点的距离总和最小的点。对树进行dfs,同时记录子树的节点个数,所有孩子节点到当前根节点的距离总和,以及当前子树中任意两点距离和。然后在进行dfs求解到该子树中所有点距离和最小的点。
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair <int, int> pii;
#define maxn 5005
#define INF 0x3f3f3f3f3f3f3f3fll int f[maxn], h[maxn], w[maxn];
vector<pii> g[maxn];
int son[maxn];
LL d[maxn], s[maxn]; void dfs(int v, int rt){
son[v] = , d[v] = , s[v] = ;
for(int i = ; i != g[v].size(); i ++){
int u = g[v][i].first;
if(u==rt) continue;
dfs(u, v);
s[v] += s[u] + d[u]*son[v] + d[v]*son[u] + (LL)son[u] * son[v] * g[v][i].second;
d[v] += d[u] + (LL)son[u] * g[v][i].second;
son[v] += son[u];
}
son[v] ++;
s[v] += d[v];
}
void dfsw(int v, int rt, LL &minn){
minn = min(d[v], minn);
for(int i = ; i != g[v].size(); i ++){
int u = g[v][i].first;
if(u==rt) continue;
d[u] = d[u] + (d[v] - d[u] - (LL)son[u]*g[v][i].second) + (LL)(son[v] - son[u])*g[v][i].second;
son[u] = son[v];
dfsw(u, v, minn);
}
}
int main(){
//freopen("test.in", "r", stdin);
for(int n; scanf("%d", &n)!=EOF; ){
for(int i = ; i <= n; i ++){
g[i].clear();
}
for(int i = , x, y, z; i < n; i ++){
scanf("%d%d%d", &x, &y, &z);
f[i] = x, h[i] = y, w[i] = z;
g[x].push_back(make_pair(y, z));
g[y].push_back(make_pair(x, z));
}
LL ans = INF, minn = INF, sum = ;
for(int i = ; i < n; i ++){
minn = INF;
dfs(f[i], h[i]);
dfsw(f[i], h[i], minn);
sum = ;
sum = (n - son[f[i]]) * minn + s[f[i]];
minn = INF;
dfs(h[i], f[i]);
dfsw(h[i], f[i], minn);
sum = sum + (n - son[h[i]]) * minn + s[h[i]] + (LL)son[f[i]]*son[h[i]]*w[i];
ans = min(ans, sum);
}
printf("%I64d\n", ans);
}
return ;
}
Codeforces 294E Shaass the Great的更多相关文章
- CodeForces - 294A Shaass and Oskols
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- Codeforces 294D - Shaass and Painter Robot
294D - Shaass and Painter Robot 思路: 可以用数学归纳法证明一个结论:整个棋盘黑白相间当且仅当边缘黑白相间. 分奇偶讨论又可得出边缘黑色格个数为n+m-2 这样就可以暴 ...
- Codeforces 294B Shaass and Bookshelf:dp
题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, ...
- Codeforces K. Shaass and Bookshelf(动态规划三元组贪心)
题目描述: B. Shaass and Bookshetime limit per test 2 secondsmemory limit per test 256 megabytesinput ...
- Codeforces 294B Shaass and Bookshelf(记忆化搜索)
题目 记忆化搜索(深搜+记录状态) 感谢JLGG //记忆话搜索 //一本书2中状态,竖着放或者横着放 //初始先都竖着放,然后从左边往右边扫 #include<stdio.h> #inc ...
- CodeForces 294B Shaass and Bookshelf 【规律 & 模拟】或【Dp】
这道题目的意思就是排两排书,下面这排只能竖着放,上面这排可以平着放,使得宽度最小 根据题意可以得出一个结论,放上这排书的Width 肯定会遵照从小到大的顺序放上去的 Because the total ...
- OUC_OptKernel_oshixiaoxiliu_好题推荐
poj1112 Team Them Up! 补图二分图+dp记录路径codeforces 256A Almost Arithmetical Progression dp或暴力 dp[i][j] = d ...
- Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf —— DP
题目链接:http://codeforces.com/contest/294/problem/B B. Shaass and Bookshelf time limit per test 1 secon ...
- Codeforces Round #178 (Div. 2) B .Shaass and Bookshelf
Shaass has n books. He wants to make a bookshelf for all his books. He wants the bookshelf's dimensi ...
随机推荐
- softmax
void LogisticRegression_softmax(LogisticRegression *this, double *x) { int i; double max = 0.0; doub ...
- Nigix快速上手注意事项
linux下,主要关于配置,包括主从,待续......
- Qt之json解析
Jsoner::Jsoner(QObject *parent) : QObject(parent){ QJsonObject json; json.insert("loginna ...
- DataGridView出现大红叉--在使用多线程访问数据源时
datagridview 的数据源操作在一个方面里面处理 不要多个地方处理 并且处理的时候要加锁 红叉 应该是多线程操作出现的. try catch 只是起到 捕获异常的功能,但是一旦出现了这种错误 ...
- 如何跳到系统设置界面-b
NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"]; if ([[UIApplication sharedApplicati ...
- html 5 中的 6位 十六进制颜色码 代表的意思
人的眼睛看到的颜色有两种: ⒈ 一种是发光体发出的颜色,比如计算机显示器屏幕显示的颜色: ⒉ 另一种是物体本身不发光,而是反射的光产生 十六进制颜色码 的颜色,比如看报纸和杂志上的颜色. 我们又知道任 ...
- Codeforces Round #316 div2
一场充满血腥hack之战!!! Problem_A: 题意: n个候选人在m个城市进行投票,每个城市选出票数最多的一个候选人为城市候选人,如果票数相同,则取编号小的候选人. 再从这m个城市候选人中选出 ...
- vs2010 使用SignalR 提高B2C商城用户体验(一)
vs2010 使用SignalR 提高B2C商城用户体验(一) 1.需求简介,做为新时代的b2c商城,没有即时通讯,怎么提供用户粘稠度,怎么增加销量,用户购物的第一习惯就是咨询,即时通讯,应运而生.这 ...
- 大数据量查询优化——数据库设计、SQL语句、JAVA编码
数据库设计方面: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将 ...
- canvas仿黑客帝国的字符下落
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...