Corporative Network
Input
Your program has to be ready to solve more than one test case. The first line of the input file will contains only the number T of the test cases. Each test will start with the number N of enterprises (5≤N≤20000). Then some number of lines (no more than
200000) will follow with one of the commands:
E I – asking the length of the path from the enterprise I to its serving center in the moment;
I I J – informing that the serving center I is linked to the enterprise J.
The test case finishes with a line containing the word O. The I commands are less than N.
Output
The output should contain as many lines as the number of E commands in all test cases with a single number each – the asked sum of length of lines connecting the corresponding enterprise with its serving center.
Sample Input
1
4
E 3
I 3 1
E 3
I 1 2
E 3
I 2 4
E 3
O
Sample Output
0
2
3
5
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=20000+10;
int pa[maxn],d[maxn];
int find(int x)
{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;
cin>>t;
while(t--)
{int n,i,v,u;
char c[9];
cin>>n;
for(i=1;i<=n;i++){pa[i]=i;d[i]=0;}
while(cin>>c&&c[0]!='O')
{if(c[0]=='E'){cin>>u;find(u);cout<<d[u]<<endl;}
if(c[0]=='I'){cin>>u>>v;pa[u]=v;d[u]=abs(u-v)%1000;}
}
}
return 0;
}