題意:
有n台電腦,兩種指令
c com1 com2 把com1 com2 兩台電腦連線
q com1 com2 問這兩台有沒有連線
最後輸出q的時候有連線的次數以及沒連線的次數
解法:
用disjoint set去處理兩台電腦有沒有連線的問題
程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int set[1234567];
int findSet(int now){
if(set[now]!=now)set[now] = findSet(set[now]);
return set[now];
}
int n;
char str[123456];
int main(){
int t;
int i,j;
int ans[2];
scanf("%d",&t);
gets(str);
gets(str);
while(t--){
scanf("%d",&n);
gets(str);
ans[0] = ans[1] = 0;
for(i=1;i<=n;++i)set[i] = i;
while(gets(str)&&str[0]!='\0'){
if(str[0]=='c'){
sscanf(&str[1],"%d %d",&i,&j);
set[findSet(i)] = findSet(j);
}else {
sscanf(&str[1],"%d %d",&i,&j);
if(findSet(i)==findSet(j))++ans[0];
else ++ans[1];
}
}
printf("%d,%d\n",ans[0],ans[1]);
if(t)puts("");
}
return 0;
}