昨天不知道怎么搞的,,网站崩溃了一天。。
并查集!!
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