P1196 【[NOI2002]銀河英雄傳說】
阿新 • • 發佈:2018-11-08
兩個 eset div res name == col tom thml
以下有T行,每行有一條指令。指令有兩種格式:
-
Mi,j:i和j是兩個整數(1≤i,j≤30000),表示指令涉及的戰艦編號。該指令是萊因哈特竊聽到的楊威利發布的艦隊調動指令,並且保證第i號戰艦與第j號戰艦不在同一列。
-
Ci,j:i和j是兩個整數(1≤i,j≤30000),表示指令涉及的戰艦編號。該指令是萊因哈特發布的詢問指令。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int n,dis[1000000],ans[1000000],fa[1000000]; 5 int find(int x) 6 { 7 if(x!=fa[x]) 8 { 9 int next=fa[x]; 10 fa[x]=find(fa[x]); 11 dis[x]+=dis[next]; 12 ans[x]=ans[fa[x]]; 13 } 14 return fa[x]; 15 } 16 int main() 17 { 18 scanf("%d",&n); 19 int x,y; 20 char s[10]; 21 for(int i=1;i<=n;++i) fa[i]=i,ans[i]=1;22 for(int i=1;i<=n;++i) 23 { 24 scanf("%s%d%d",s,&x,&y); 25 if(s[0]==‘M‘) 26 { 27 int r1=find(x),r2=find(y); 28 if(r1!=r2) 29 { 30 fa[r1]=r2; 31 dis[r1]+=dis[r2]+ans[r2]; 32 ans[r1]+=ans[r2];33 ans[r2]=ans[r1]; 34 } 35 } 36 if(s[0]==‘C‘) 37 { 38 int r1=find(x),r2=find(y); 39 if(r1!=r2) printf("-1\n"); 40 else printf("%d\n",abs(dis[x]-dis[y])-1); 41 } 42 } 43 }
P1196 【[NOI2002]銀河英雄傳說】