zoukankan      html  css  js  c++  java
  • The Suspects 并查集

    POJ - 1611 

     1 #include<iostream>
     2 #include<algorithm> 
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int n,m,k,t;
     7 int a[30001],s[30001]; //s[]储存输入的,a[]用来找爸爸!! 
     8 
     9 int getf(int u)
    10 {
    11     return u==a[u]? u:getf(a[u]);
    12 }
    13 void merge(int x,int y)
    14 {
    15     x=getf(x);
    16     y=getf(y);
    17     if(x!=y)
    18     {
    19         a[max(x,y)]=min(x,y); //x,y的大小要比较一下,,这里为了少打代码 直接写了 
    20     }
    21 }
    22 int main()
    23 {
    24     while(cin>>n>>m)
    25     {
    26         if(n==0&&m==0) break;
    27         for(int i=0;i<n;i++)
    28             a[i]=i;  //初始化 
    29         memset(s,0,sizeof(s));
    30         for(int i=0;i<m;i++)
    31         {
    32             cin>>t;
    33             for(int i=0;i<t;i++)
    34                 cin>>s[i];
    35             for(int i=1;i<t;i++)
    36                 merge(s[i-1],s[i]); //只要相邻两个人查一下关系, 任何一个人的身份都能确认 
    37         }
    38         int cnt=1; //原来 0的人本身就是一个嫌疑人 
    39         for(int i=1;i<n;i++)
    40             if(getf(i)==getf(0))  // 如果是和嫌疑人0有接触过的人 
    41                 cnt++;
    42         cout<<cnt<<endl;
    43     }
    44 }
  • 相关阅读:
    vpp编写plugin
    vrf 命令
    vxlan + 多个vrf
    dpdk helloworld
    Go函数高级
    Go_defer
    Go递归函数
    Go作用域
    Go函数
    Go字符串
  • 原文地址:https://www.cnblogs.com/thunder-110/p/9021278.html
Copyright © 2011-2022 走看看