04-2

莫名的一坑

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值