HDOJ 1232 畅通工程

  第一次使用并查集,查找、合并。好爽。较为简单,一次AC~

View Code
 1 //#include <fstream>   
2 #include <iostream>
3 using namespace std;
4 unsigned point[1001];
5 unsigned find(unsigned value)
6 {
7 while(value!=point[value])
8 value=point[value];
9 return value;
10 }
11 void merge(unsigned xvalue,unsigned yvalue)
12 {
13 unsigned x=find(xvalue);
14 unsigned y=find(yvalue);
15 if(x!=y)
16 point[x]=y;
17 }
18
19 int main()
20 {
21 //ifstream cin("畅通工程.txt");
22 int pointNum,lineNum;
23 while (cin>>pointNum)
24 {
25 if(pointNum==0)
26 break;
27 for(int i=0;i<=pointNum;i++)
28 point[i]=i;
29 cin>>lineNum;
30 while (lineNum--)
31 {
32 unsigned start,end;
33 cin>>start>>end;
34 merge(start,end);
35 }
36 int count=-1;
37 for(int j=1;j<=pointNum;j++)
38 if(j==point[j])
39 count++;
40 cout<<count<<endl;
41 }
42 return 0;
43 }



posted on 2011-07-31 22:01  AdaByron  阅读(198)  评论(0编辑  收藏  举报

导航