zoukankan      html  css  js  c++  java
  • POJ1161(并查集)

    1、题目链接地址

      http://poj.org/problem?id=1161

    2、源代码

    #include <iostream>
    using namespace std;
    int parent[30001];
    int suspect[30001];
     
    int find(int x)
    {
       if(parent[x] == x)
       {
          return x;
       }
       else
       {
          return parent[x] = find(parent[x]);
       }
    }
     
    void Union(int a, int b)
    {
       int x = find(a);
       int y = find(b);
       if(x == y)
       {
          return;
       }
       parent[y] = x;
       suspect[x] = suspect[x] + suspect[y];
    }
     
    int main()
    {
       int m, n;
       int a, b, c;
       int x;
       int i;
       while(cin >> m >> n)
       {
          if(m == 0 && n == 0)
          {
              break;
          }
          
          for(i = 0; i <= m; i++)
          {
            parent[i] = i;
            suspect[i] = 1;
          }
          
          while(n--)
          {
            cin >> a >> b;
            a--;
            while(a--)
            {
               cin >> c ;
               if(find(c) != find(b))
               {
                   Union(c, b);
               }
            }
          }
     
          cout << suspect[find(0)] << endl;
       }
       return 0;
    }
    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    求a,b在区间上的公倍数个数
    最长非上升子序列的长度
    uva 11992 线段树
    hdu 5464 dp
    hdu 5465 树状数组
    hdu 5459 递推
    poj 2528 动态线段树
    hdu 4474 bfs
    ural 1495 bfs
    hdu 2795 线段树
  • 原文地址:https://www.cnblogs.com/tianxue/p/3917018.html
Copyright © 2011-2022 走看看