uva 1329 Corporative Network

来源:互联网 发布:飞友网络待遇 编辑:程序博客网 时间:2024/04/29 01:23

点击打开链接uva 1329

思路: 带权并查集
分析:
1 看懂题目就是切菜了

代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN = 20010;int n;int father[MAXN];int rank[MAXN];void init(){    memset(rank , 0 , sizeof(rank));    for(int i = 1 ; i < MAXN ; i++)        father[i] = i;}int find(int x){    if(father[x] == x)        return x;    int tmp = father[x];    father[x] = find(father[x]);    rank[x] += rank[tmp];    return father[x];}int main(){    int Case;    char c;    int x , y;    scanf("%d" , &Case);    while(Case--){         init();         scanf("%d%*c" , &n);          while(scanf("%c" , &c) && c != 'O'){              if(c == 'E'){                  scanf("%d%*c" , &x);                  int tmp = find(x);                  printf("%d\n" , rank[x]);              }              else{                  scanf("%d%d%*c" , &x , &y);                   int fx = find(x);                   int fy = find(y);                   if(fx != fy){                     father[fx] = fy;                     rank[fx] = abs(x-y)%1000+rank[y]-rank[x];                  }              }          }    }    return 0;}