2013腾讯编程马拉松初赛第2场(3月22)(HDU 4510 HDU4511 HDU4512 HDU4513 HDU4514)
这次的比赛。。被虐爆了。。做了一个多小时确定下来除了第一题我都做不出来之后。。。我就。。。就。。。。。
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4510
题解:水题,格式要注意,还需要注意的是时钟。。。一圈12小时。。不是24小时。。。
#include <iostream>using namespace std;#define min(a,b)((a)<(b)?(a):(b))#define max(a,b)((a)>(b)?(a):(b))const int maxn = 1000005;int fa[maxn], len[maxn];int n, m;int find(int x){if (x == fa[x]) return x;return find(fa[x]);}int main(){while (scanf("%d %d", &n, &m) != EOF){int i;bool flag = false;for (i=0; i <= n; i++)fa[i] = i;memset(len, 0, (n+1)*sizeof(len[0]));for (i=0; i<m; i++){int a, b, length;scanf("%d %d %d", &a, &b, &length);int faa = find(a);int fab = find(b);if (faa == fab) flag = true;else if (!flag)//剪枝{int c = min(faa,fab);int d = max(faa,fab);fa[d] = c;len[c] += length;}}if (flag)puts("YES");else{int maxlen = 0;for (i=1; i<=n; i++)if (len[i] > maxlen)maxlen = len[i];printf("%d\n", maxlen);}}return 0;}