UVA 10308 Roads in the North
2011-12-12 16:54
375 查看
UVA_10308
由于原图是一棵树,这样我们只要随便指定一个树根就可以画成树的形式,那么所有路径都可以看成以父节点为中转点的“儿子甲+儿子乙”的形式(当然只有一个儿子的处理方式也是一样的),同时我们用dfs遍历树的时候父节点顺便向上返回一个最大的儿子即可。
我在看UVA的论坛的时候,有人说是存在village数为0的情况,并且这种情况用一个空行表示,因此我们不能把所有的空行都当做分割线去处理,但实际上不考虑这种情况直接交也能AC,可能是后来UVA改了数据吧,不过我的程序还是按考虑有这种情况来写的。
由于原图是一棵树,这样我们只要随便指定一个树根就可以画成树的形式,那么所有路径都可以看成以父节点为中转点的“儿子甲+儿子乙”的形式(当然只有一个儿子的处理方式也是一样的),同时我们用dfs遍历树的时候父节点顺便向上返回一个最大的儿子即可。
我在看UVA的论坛的时候,有人说是存在village数为0的情况,并且这种情况用一个空行表示,因此我们不能把所有的空行都当做分割线去处理,但实际上不考虑这种情况直接交也能AC,可能是后来UVA改了数据吧,不过我的程序还是按考虑有这种情况来写的。
#include<stdio.h> #include<string.h> #define MAXD 10010 #define MAXM 20010 char b[100]; int start, e, first[MAXD], next[MAXM], v[MAXM], w[MAXM]; long long int res; void add(int x, int y, int z) { w[e] = z; v[e] = y; next[e] = first[x]; first[x] = e; e ++; } long long int dfs(int u, int fa) { int i, j; long long int max = 0, ans; for(i = first[u]; i != -1; i = next[i]) if(v[i] != fa) { ans = dfs(v[i], u) + w[i]; if(ans + max > res) res = ans + max; if(ans > max) max = ans; } return max; } void solve() { int i, j, k; res = 0; dfs(1, -1); printf("%lld\n", res); } int main() { int x, y, z, ok = 1, blank = 1; while(ok) { memset(first, -1, sizeof(first)); e = start = 0; for(;;) { if(gets(b) == NULL) { ok = 0; break; } if(b[0] == '\0') { if(blank) { if(gets(b) == NULL) ok = 0; } blank = 1; break; } else blank = 0; sscanf(b, "%d%d%d", &x, &y, &z); start = x; add(x, y, z); add(y, x, z); } solve(); } return 0; }
相关文章推荐
- uva 10308 - Roads in the North(dfs)
- UVa:10308 Roads in the North
- [POJ 2631/UVA 10308 Roads in the North] DFS求树上的最长路
- UVa 10308 Roads in the North 树的直径
- UVA - 10308 Roads in the North
- uva10308 - Roads in the North 树形DP
- uva 10308 Roads in the North 北方的道路
- UVA - 10308 Roads in the North
- UVA - 10308 Roads in the North 树的最长距离
- Roads in the North - UVa 10308 树形dp
- UVa 10308 Roads in the North(DFS)
- UVa 10308 Roads in the North (树上的最长路)
- UVA 10308 Roads in the North
- UVa 10308 - Roads in the North (树上的最长路径)
- uva 10308 Roads in the North
- 10308 - Roads in the North
- 10308 - Roads in the North--不好!
- 10308 - Roads in the North (树形dp)
- POJ - 2631 Roads in the North
- poj 2631 Roads in the North【树的直径裸题】