zoukankan      html  css  js  c++  java
  • pku2524(Ubiquitous Religions)

    这道题一开始的思路不过严谨,忽略 了一种情况,悲剧,本想一次过的

    这题不难,跟前面的某一到题目类似,不过不是求集合的元素个数,而是求有多少个集合

    具体思路很简单,在代码中……

    #include<stdio.h>
    #define MAXN 50010
    int f[MAXN],r[MAXN],n,num;
    int find(int x)
    {
    	if(x!=f[x])
    		f[x]=find(f[x]);
    	return f[x];
    }
    void Union(int x,int y)
    {
    	int a=find(x);
    	int b=find(y);
    	if(a==b)//若父节点相同,则表示都出现过了,不同,则表示有一个学生会被归入某一个集合中,所以num--;
    		return ;
    	num--;
    		if(r[a]>r[b])
    		{
    			f[b]=a;
    		}
    		else {
    			f[a]=b;
    			if(r[a]==r[b])
    				r[b]++;
    		}
    }
    int main()
    {
    	int n,m,i,c=0,a,b;
    	while(scanf("%d %d",&n,&m)!=EOF &&(n||m))
    	{
    		num=n;
    		for(i=1;i<=n;i++)
    		{
    			f[i]=i;
    			r[i]=0;
    		}
    		for(i=1;i<=m;i++)
    		{
    			scanf("%d %d",&a,&b);
    			Union(a,b);
    		}
    		printf("Case %d: %d\n",++c,num);
    	}
    	return 0;
    }
    
  • 相关阅读:
    集合
    3/11
    字典
    3/10
    字符串之不常用方法
    字符串的索引和切片
    数据类型的转化
    Markdown在线编辑器
    3/9
    Django:RestFramework之-------渲染器
  • 原文地址:https://www.cnblogs.com/nanke/p/2038726.html
Copyright © 2011-2022 走看看