F - The Suspects(2017-01-16)

题目大意
这道题是一道并查集的题,大概意思就是编号为0的人被认为带有SARS病毒,与他同一组的人有可能被传染,而他们被传染后可能再次传染和他们同组的人;所以题目要求求出有多少人可能被传染?
思路
将输入的同组的人连起来,注意连的时候要把节点少的往节点大的树上连,不然可能会退化成链表;然后再搜索和0同一棵树上的人有多少;

代码如下:

#include<stdio.h>
int pre[30005];
int n,m,k,a,b;
int find(int x)
{
    if(pre[x]==x) return x;
    else
    return find(pre[x]);
}
int Union(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if(fy>fx)
    {
        pre[fy]=fx;
    }
    if(fy<fx)
    {
        pre[fx]=fy;
    }
}
void ini()
{
    for(int i=0;i<n;i++)
    {
        pre[i]=i;
    }
}
int main()
{
    
    while(~scanf("%d%d",&n,&m)&&(n||m))
    {
        ini();
        for(int i=0;i<m;i++)
        {
            scanf("%d",&k);
            scanf("%d",&a);
            for(int j=1;j<k;j++)
            {
                scanf("%d",&b);
                Union(a,b);
            }
        }
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(find(i)==0)
            {
                ans++;
            }
        }
        printf("%d\n",ans);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 明明知道他是来找你拉票的没事儿不找你的可我也不喜欢他啊啊说实话我现在真看不上他了虽然我也不咋地但是还是愿意帮他这个...
    做坏人可以啵阅读 265评论 0 0
  • 特征用于在类之间共享接口和字段。类似于Java 8的接口。类和对象可以扩展特征,但是特征不能实例化,因此也没有参数...
    steanxy阅读 532评论 0 0
  • 行程满满的一天 今天跟老公他们一起回来祭祖,领教了他们的类型之多~ 道教宝殿——墓地——宗祠牌位 然后又去了老公出...
    敏捷的鱼儿阅读 220评论 4 1
  • 纠结 一直很纠结自己的身材 每天看见镜子里肥肥的身体,肉成圆形的脸蛋,就不想打开衣服挑衣服,就不想出门,害怕见人....
    虎毛毛阅读 177评论 0 0
  • 点点滴滴的生活里,最平凡的细节加起来,就是幸福。寒冷的冬季暖暖的杏仁茶,充滿愛的味道。 杏仁:是内服外用的美容佳品...
    黄楚涵Crystal阅读 168评论 1 1