LA 3027 Corporative Network(並查集)
阿新 • • 發佈:2017-08-02
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(並查集)