您的位置:首页 > 产品设计 > UI/UE

poj 2524 Ubiquitous Religions

2013-01-10 11:53 453 查看
并查集

1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4
5 int f[50001];//,r[30001];
6 int m,n;
7 void Init()
8 {
9     for(int i=1;i<=m;++i)    f[i]=i;
10     //memset(r,0,sizeof(r));
11 }
12
13 int father(int k)
14 {
15     if(k !=f[k])
16         return father(f[k]);
17     return f[k];
18 }
19
20 void unionset(int k,int t)
21 {
22     int i=father(k);
23     int j=father(t);
24     f[j]=i;
25     /*if(r[i]<r[j])
26         f[i]=j;
27     else
28     {
29         f[j]=i;
30         if(r[i]==r[j])
31             r[i]++;
32     }*/
33
34 }
35 void readData()
36 {
37     int i,j,k,t,num;
38     num=1;
39     while(cin>>m>>n)
40     {
41         if(m==0 && n==0) break;
42         Init();//
43         for(int i=1;i<=n;++i)
44         {
45             scanf("%d%d",&k,&t);
46             if(father(k)!=father(t))
47             {
48                 unionset(k,t);
49             }
50         }
51         int ans=0;
52         for(i=1;i<=m;++i)
53         {
54             if(i==f[i]) ans++;
55         }
56         printf("Case %d: %d\n",num++,ans);
57     }
58 }
59 int main()
60 {
61     //Init();
62 //freopen("a.txt","r",stdin);
63     readData();
64     return 0;
65 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: