昨天不知道怎么搞的,,网站崩溃了一天。。
并查集!!
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> //用于使用abs using namespace std; const int maxn = 20000 + 10; int pa[maxn], d[maxn]; int find(int x) { //路径压缩,同时维护d[i]:结点i到树根的距离 if(pa[x] != x) { int root = find(pa[x]); d[x] += d[pa[x]]; return pa[x] = root; } else return x; } int main() { int T; scanf("%d", &T); while(T--) { int n, u, v; char cmd[9]; scanf("%d", &n); for(int i=0; i <= n; i++) { pa[i] = i; d[i] = 0; } //初始化,每个结点单独是一棵树 while(scanf("%s", cmd) && cmd[0] != 'O') { if(cmd[0] == 'E') { scanf("%d", &u); find(u); //调用find函数,其实是维护d[i]的值 printf("%d\n", d[u]); } if(cmd[0] == 'I') { scanf("%d %d", &u, &v); pa[u] = v; d[u] = abs(u - v) % 1000; } } } return 0; }
UVALive - 3027 - Corporative Network (并查集!!)
原文地址:http://blog.csdn.net/u014355480/article/details/43406477