HDU-1232-畅通工程(并查集)

题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1232
考察并查集,(最小生成树)题目很简单
用k记录树根的个数,k-1就是还需要建设的路 #include<iostream>
#include<cstdio>
using namespace std;
struct
node
{

int
x,y;
}
s[]; int father[]; int Find(int x)
{

if
(x==father[x]) return x;
father[x]=Find(father[x]);
return
father[x];
}
void Union(int x,int y)
{

x=Find(x);
y=Find(y);
if
(x!=y)
{

father[x]=y;
}
}
int main(void)
{

int
n,m,i,j,k,l;
while
(scanf("%d",&n)==&&n)
{

scanf("%d",&m);
for
(i=;i<m;i++)
scanf("%d%d",&s[i].x,&s[i].y);
for
(i=;i<=n;i++)
father[i]=i;
for
(i=;i<m;i++)
{

Union(s[i].x,s[i].y);
}

k=;
for
(i=;i<=n;i++)
{

if
(i==father[i])
k++;
}

printf("%d\n",k-);
}

return
;
}
上一篇:《javascript设计模式与开发实践》--- (单一职责原则)


下一篇:DDD实践问题之 - 关于论坛的帖子回复统计信息的更新的思考