Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
树的分治还是蛮烦的#include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> using namespace std; #define MAX_N 11000 struct tnode { int t, w, n; }; tnode e[MAX_N * 2]; int fi[MAX_N], d[MAX_N], size[MAX_N]; int f[MAX_N]; bool used[MAX_N]; int tot, rs, root, sx; int n, m, es; void inserte(int x, int y, int z) { e[++es].t = y, e[es].w = z, e[es].n = fi[x], fi[x] = es; } void init(void) { memset (fi, -1, sizeof (fi)); memset (used, false, sizeof (used)); es = -1; for (int i = 1, x, y, z; i < n; i++) { scanf ("%d%d%d", &x, &y, &z); inserte (x, y, z); inserte (y, x, z); } } void get_root(int x, int p) { int big = -1; size[x] = 1; for (int i = fi[x], t; i != -1; i = e[i].n) { t = e[i].t; if (used[t] || t == p) continue; get_root (t, x); size[x] += size[t]; if (size[t] > big) big = size[t]; } if (sx - size[x] > big) big = sx - size[x]; if (big < rs) rs = big, root = x; } void get_dis(int x, int dis, int p) { d[++tot] = dis; for (int i = fi[x], t; i != -1; i = e[i].n) { t = e[i].t; if (used[t] || t == p) continue; get_dis (t, dis + e[i].w, x); } } int count(int x, int y) { int s = 0; tot = 0, get_dis (x, y, -1); sort (d + 1, d + tot + 1); for (int i = 1, j = tot; i <= j; i++) { while (d[i] + d[j] > m && i <= j) j--; if (i < j) s += j - i; } return s; } int find_root(int x) { rs = sx = size[x]; get_root (x, -1); return root; } void dfs(int x) { x = find_root (x); f[x] = count (x, 0); used[x] = true; for (int i = fi[x], t; i != -1; i = e[i].n) { t = e[i].t; if (used[t]) continue; f[x] -= count(t, e[i].w); dfs (t); } } int main(void) { // freopen ("1741.in", "r", stdin); // freopen ("1741.out", "w", stdout); while (scanf ("%d%d", &n, &m) != EOF && n) { init(); size[1] = n, dfs (1); int ans = 0; for (int i = 1; i <= n; i++) ans += f[i]; printf ("%d\n", ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator