首页 > 代码库 > LA 3027 Corporative Network(并查集)

LA 3027 Corporative Network(并查集)

有n个点,一开始都是孤立的,然后有I,E两种操作 
I        u v,把u的父节点设为v,距离为abs(u-v) % 1000,保证u之前没有父节点 
E      询问u到根节点的距离

#include<iostream>#include<cmath>using namespace std;const int maxn=2e4+5;int par[maxn],dis[maxn];void init(int n){    for(int i=0;i<=n;i++)    {        par[i]=i;        dis[i]=0;    }}int find(int x){    if(x==par[x])        return x;    int root=find(par[x]);    dis[x]+=dis[par[x]];    return par[x]=root;}int main(){    int t;    cin>>t;    while(t--)    {        int n;        cin>>n;        init(n);        char s[5];        while(cin>>s,s[0]!=O)        {            int p,q;            if(s[0]==E)            {                cin>>p;                find(p);                cout<<dis[p]<<endl;            }            if(s[0]==I)            {                cin>>p>>q;                par[p]=q;                dis[p]=abs(p-q)%1000;            }        }    }    return 0;}

 

LA 3027 Corporative Network(并查集)