Luo Gu P2052 [NOI2011] road construction
topic:
- There are pictures. Turn link
answer:
Though this is the NOI, but to comment too blue title bar ... malicious ...
- A simple search? ? It is to find sub-tree size is OK ...
- Tucao: Today Team %%% Lord left to a question which, as a game. Then this question when I only took 55pts. A Los valley on the. God bother
#include <iostream>
#include <cstdio>
#include <cmath>
#define N 1000005
#define LL long long
using namespace std;
struct E {LL next, to, dis;} e[N * 2];
LL n, num, ans;
LL h[N], size[N];
LL read() {
LL x = 0; char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}
return x;
}
void add(LL u, LL v, LL w) {
e[++num].next = h[u];
e[num].to = v;
e[num].dis = w;
h[u] = num;
}
void dfs(LL x, LL fat) {
size[x]++;
for (LL i = h[x]; i != 0; i = e[i].next)
if (e[i].to != fat) {
dfs(e[i].to, x);
size[x] += size[e[i].to];
}
}
void dfss(LL x, LL fat) {
for (LL i = h[x]; i != 0; i = e[i].next)
if (e[i].to != fat) {
LL y = e[i].to;
ans += e[i].dis * abs(size[y] - (size[1] - size[y]));
dfss(e[i].to, x);
}
}
int main() {
cin >> n;
for (LL i = 1; i < n; i++) {
LL u = read(), v = read(), w = read();
add(u, v, w);
add(v, u, w);
}
dfs(1, 0);
dfss(1, 0);
cout << ans;
return 0;
}