• POJ1611 The Suspects 并查集模板题


    题目大意:中文题不多说了

    题目思路:将每一个可能患病的人纳入同一个集合,然后遍历查找每个点,如果改点点的根节点和0号学生的根节点相同,则该点可能是病人。

    模板题并没有思路上的困难,只不过在遍历时需要额外注意一点,避免超时,具体看代码吧

    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define MAX 1000005
    
    using namespace std;
    
    int father[MAX],a[MAX];
    
    int Find(int k)
    {
        while(k!=father[k])
        {
            k=father[k];
        }
        return k;
    }
    
    int main()
    {
        int n,m,k,i,j,ans,a,b,sum;
    
        while(scanf("%d%d",&n,&m),n||m)
        {
            sum=0;
    
            for(i=0;i<n;i++)
                father[i]=i;
    
            for(i=1;i<=m;i++)
            {
                scanf("%d%d",&k,&a);
    
                for(j=1;j<k;j++)
                {
                    scanf("%d",&b);
    
                    int x=Find(a);
                    int y=Find(b);
    
                    if(x!=y)
                    {
                        father[y]=x;
                    }
                }
    
            }
    
            int ans=Find(0);//为了节省时间,在循环外求出Find(0),不然会超时。
    
            for(i=0;i<n;i++)
            {
                if(ans==Find(i))
                    sum++;
            }
    
            printf("%d
    ",sum);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    简单错误记录
    识别有效的IP地址和掩码并进行分类统
    爬虫必备—BeautifulSoup
    爬虫必备—requests
    Shellinabox安装及使用教程
    Django——REST framework
    SaltStack部署
    使用js在HTML中自定义字符串格式化方法
    3种上传图片并实现预览的方法
    Ajax
  • 原文地址:https://www.cnblogs.com/alan-W/p/5746222.html
Copyright © 2020-2023  润新知