您的位置:首页 > 其它

HDOJ 1232 畅通工程解题报告

2011-07-31 22:01 369 查看
//#include <fstream>
#include <iostream>
using namespace std;
unsigned point[1001];
unsigned find(unsigned value)
{
while(value!=point[value])
value=point[value];
return value;
}
void merge(unsigned xvalue,unsigned yvalue)
{
unsigned x=find(xvalue);
unsigned y=find(yvalue);
if(x!=y)
point[x]=y;
}

int main()
{
//ifstream cin("畅通工程.txt");
int pointNum,lineNum;
while (cin>>pointNum)
{
if(pointNum==0)
break;
for(int i=0;i<=pointNum;i++)
point[i]=i;
cin>>lineNum;
while (lineNum--)
{
unsigned start,end;
cin>>start>>end;
merge(start,end);
}
int count=-1;
for(int j=1;j<=pointNum;j++)
if(j==point[j])
count++;
cout<<count<<endl;
}
return 0;
}

总结与教训:

1、第一次使用并查集,查找、合并。好爽。

2、较为简单,一次AC。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  merge