莫名的一坑
http://www.patest.cn/contests/mooc-ds/04-2
数据太大,要用压缩路径
int findRoot(int x){
if(a[x]==-1){
return x;
}else{
int tmp=findRoot(a[x]);
a[x]=tmp;//路径压缩
return tmp;
}
}
/*
title:
问题分类:
*/
#include<stdio.h>
#define MAX 10010
int a[MAX];
void init(){
for(int i=1;i<MAX;i++){
a[i]=-1;
}
}
int findRoot(int x){
if(a[x]==-1){
return x;
}else{
int tmp=findRoot(a[x]);
a[x]=tmp;//路径压缩
return tmp;
}
}
int main(){
freopen("in.txt","r",stdin);
int zu;
while(scanf("%d",&zu)!=EOF){
init();
char c;
getchar();
scanf("%c",&c);
while(c!='S'){
if(c=='C'){
int m,n;
scanf("%d %d",&m,&n);
int aa=findRoot(m);
int bb=findRoot(n);
if(aa==bb){
printf("yes\n");
}else{
printf("no\n");
}
}else if(c=='I'){
int p,q;
scanf("%d %d",&p,&q);
a[p]=q;
}
getchar();
scanf("%c",&c);
}
int cnt=0;
for(int i=1;i<=zu;i++){
if(a[i]==-1){
cnt++;
}else if(a[i]>zu){
//我以为这里是6的坑,可是不是,sad
cnt++;
}
}
if(cnt==1){
printf("The network is connected.\n");
}else {
printf("There are %d components.\n",cnt);
}
}
return 0;
}