1. 程式人生 > >LA 3027 Corporative Network(並查集)

LA 3027 Corporative Network(並查集)

using namespace while += fin clas 都是 ont roo

有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(並查集)