標籤:
3027 - Corporative Network
思路:並查集;
cost記錄當前點到根節點的距離,每次合并時路徑壓縮將cost更新。
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<math.h> 6 #include<stack> 7 #include<set> 8 #include<queue> 9 using namespace std;10 int bin[20005];11 int du[20005];12 char str[20];13 int main(void)14 {15 int i,j;16 int n;17 scanf("%d",&n);18 while(n--)19 {20 int m;21 scanf("%d",&m);22 for(i = 1; i <= 20005; i++)23 bin[i] = i,du[i] = 0;24 while(scanf("%s",str),str[0]!=‘O‘)25 {26 int x,y;27 if(str[0]==‘I‘)28 {29 scanf("%d %d",&x,&y);30 int xx;31 for(xx = y; bin[xx]!=xx;)32 {33 xx = bin[xx];34 du[y]+=du[xx];35 }36 bin[y] = xx;37 bin[x] = xx;38 du[x] = du[y]+abs(x-y)%1000;39 }40 else41 { int sum = 0;42 int xx;scanf("%d",&x);43 for(xx = x; bin[xx]!=xx;)44 {45 xx=bin[xx],du[x]+=du[xx];46 }47 bin[x] = xx;48 printf("%d\n",du[x]);49 }50 }51 }52 return 0;53 }
3027 - Corporative Network