题目链接
05-树8 File Transfer
code
using namespace std;
int fa[MAXN];
int FIND(int x){
return fa[x]==x?x : fa[x] = FIND(fa[x]);
}
void UNION(int x,int y){
x = FIND(x);y = FIND(y);
if(x!=y)fa[x] = y;
}
int next_node(char *s){
scanf("%s", s);
// printf("%s\n", s);
return atoi(s);
}
int n;
int main(int argc, char const *argv[]) {
for(int i=1 ; i<=MAXN ; ++i)fa[i] =i;
cin>>n;
char op[10];
char s[100];
while (scanf("%s",op ) && op[0]!='S') {
int x = next_node(s);
int y = next_node(s);
// printf("%s %d %d\n", op,x,y);
if(op[0]=='I')UNION(x,y);
else{
// printf("%d\n",FIND(y) );
// printf("%d\n", FIND(x));
printf("%s\n", FIND(x)!=FIND(y)?"no":"yes");
}
}
int sz_root = 0;
for(int i=1 ; i<=n ; ++i){
sz_root+= (FIND(i)==i);
}
if(sz_root==1)printf("The network is connected.\n");
else printf("There are %d components.\n", sz_root);
return 0;
}