• 找同乡


    题目链接: http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1683&konwledgeId=135

    解题思路: 并查集。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int MAXN = 100005;
     5 
     6 int f[MAXN];
     7 int num[MAXN];
     8 int n,m;
     9 
    10 int getFather(int x)
    11 {
    12     if (x==f[x]) return f[x];
    13     return f[x]=getFather(f[x]);
    14 }
    15 
    16 void union_set(int x,int y)
    17 {
    18     int fx=getFather(x);
    19     int fy=getFather(y);
    20     if (fx!=fy) f[fx]=fy,num[fy]+=num[fx];
    21 }
    22 
    23 void init()
    24 {
    25     for (int i=0;i<=n;++i)
    26         num[i]=1, f[i]=i;
    27 }
    28 
    29 int main()
    30 {
    31 #ifndef ONLINE_JUDGE
    32     freopen("test.txt","r",stdin);
    33 #endif // ONLINE_JUDGE
    34     while(cin>>n>>m)
    35     {
    36         if (n==0 && m==0) break;
    37         init();
    38         int x,y;
    39         for (int i=1;i<=m;++i) scanf("%d%d",&x,&y), union_set(x,y);
    40         int ans=getFather(1);
    41         printf("%d
    ",num[ans]-1);
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    百度指数感想
    冲刺贡献分
    冲刺三
    通过myEclipse创建hibernate的实体类
    并发处理
    数据库设计原则(转载)
    Extjs学习
    关于oracle存储过程需要注意的问题
    oracle存储过程
    十大编程算法
  • 原文地址:https://www.cnblogs.com/djingjing/p/8893972.html
Copyright © 2020-2023  润新知