您的位置:首页 > 其它

UVALive - 3027 Corporative Network 并查集

2015-07-18 11:35 369 查看
传送门:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33982

#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;

const int MAXN = 200005;

int bin[MAXN];
int path[MAXN];

int findx(int x) {
if(x != bin[x]) {
int root = findx(bin[x]);
path[x] += path[bin[x]];
bin[x] = root;
}
return bin[x];
}

void Deal_with() {
int T,n;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i = 0 ; i <= n ; i++) {
bin[i] = i;
path[i] = 0;
}
char tempc[10];
int u,v;
while(scanf("%s",tempc) && tempc[0] != 'O') {
if(tempc[0] == 'I') {
scanf("%d %d",&u,&v);
bin[u] = v;
path[u] += abs(u - v) % 1000;
}
else {
scanf("%d",&u);
findx(u);
printf("%d\n",path[u]);
}
}
}
}

int main(void) {
//freopen("a.in","r",stdin);
Deal_with();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: