• POJ 1611 The Suspects (并查集)


    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int vis_tuan[500+10];
    int vis[30000+10];
    int mat[30000+10][510];
    int fa[30000+10];
    int ans;
    int n,m;
    int find(int x)
    {
        return fa[x]==x?x:find(fa[x]);
    }
    
    void bin(int x,int y)  //前小后大
    {
        int fx=find(x);
        int fy=find(y);
        if(fx!=fy)
        {
           // printf("x %d fx %d y %d fy %d
    ",x,fx,y,fy);
           // printf("%d %d
    ",vis[fx],vis[fy]);
    
           if(fy==0)
           {
               vis[fy]+=vis[fx];
               fa[fx]=fa[fy];
           }
           else
           {
               vis[fx]+=vis[fy];
               fa[fy]=fa[fx];
           }
        }
    }
    
    int main()
    {
    
        int i,j,k;
        while(scanf("%d%d",&n,&m),n+m)
        {
            ans=0;
            int ok=0;
            //memset(vis_tuan,0,sizeof(vis_tuan));
            memset(vis,0,sizeof(vis));
    
            for(i=0;i<=n;i++)
            {
                vis[i]=1;
                fa[i]=i;
            }
    
            for(i=0;i<m;i++)
            {
                scanf("%d",&mat[i][0]);
                int tlen=mat[i][0];
                for(j=1;j<=tlen;j++)
                {
                    scanf("%d",&mat[i][j]);
                    if(mat[i][j]==0) ok=1;
                }
                sort(mat[i]+1,mat[i]+tlen+1);
    
                for(j=2;j<=tlen;j++)
                {
                    //printf("  %d ",mat[i][j]);
                    bin(mat[i][1],mat[i][j]);
                }
                //printf("
    ");
            }
    
    
            printf("%d
    ",vis[0]);
    
    
    
    
    
            /*if(ok==1)
            {
               int ret=0;
            for(i=0;i<n;i++)
            {
                if(find(i)==0) ret++;
            }
            printf("%d
    ",ret);
            }
            else
                printf("0
    ");*/
        }
        return 0;
    }
    
  • 相关阅读:
    canvas 文本坐标(0,0)显示问题
    canvas 图片跨域处理
    canvas 文字换行
    什么是柯理化函数?
    记录一下学习webpack原理的过程
    pika和kombu实现rpc代码
    pika和rabbitMQ实现rpc代码
    docker部署rabbitMQ
    rabbitMQ和pika模块
    ubuntu搭建关于amd64或arm64,armhf架构的本地apt源
  • 原文地址:https://www.cnblogs.com/sola1994/p/4693020.html
Copyright © 2020-2023  润新知