HDU 1232 畅通工程
来源:互联网 发布:java内存模型视频教程 编辑:程序博客网 时间:2024/06/05 08:25
题意:n个城镇,m条路,列出了每条道路直接连通的城镇,目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
解题思路:并查集求连通分支数.需要建设的道路数等于连通分支数-1,找连通分支可以用父结点等于自身的方法,有几个父结点等于自身就说明有几个连通分支
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <cstdio>using namespace std;const int maxn=1000+10;int n,m;int par[maxn],rank_[maxn];void init(){ for(int i=1;i<=n;i++) { par[i]=i; rank_[i]=0; }}int find_(int x){ if(par[x]==x)return x; else return par[x]=find_(par[x]);}void unite(int x,int y){ x=find_(x); y=find_(y); if(x==y)return ; if(rank_[x]<rank_[y])par[x]=y; else { par[y]=x; if(rank_[x]==rank_[y])rank_[x]++; }}bool same(int x,int y){ return find_(x)==find_(y);}int main(){ while(scanf("%d",&n)&&n) { init(); scanf("%d",&m); int a,b; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); unite(a,b); } int ans=0; for(int i=1;i<=n;i++) { if(par[i]==i)ans++;//父结点等于自身 } printf("%d\n",ans-1); } return 0;}
阅读全文
0 0
- Hdu-1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- HDU 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- Hdu 1232 畅通工程
- HDU-1232:畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu - 1232 - 畅通工程
- hdu 1232 畅通工程
- hdu 1232畅通工程
- hdu 1232 畅通工程
- HDU 1232 畅通工程
- 史上最好记的事件分发机制
- 基于ssh和wsadmin的远程websphere部署
- pyecharts和matplotlib:基于python柱状图可视化
- Android 判断当前系统语言
- RBF or Fuzzy &pid
- HDU 1232 畅通工程
- 正则表达式简介
- 查看电脑核数
- angular2的第一个项目
- [日推荐] 『KORJO母爱小空间』妈妈带宝宝出门再也不用愁啦!
- Silhouette-Outlined Diffuse
- python 深入理解 赋值、引用、拷贝、作用域
- 图文演示绘制思维导图,分析流程图怎么画小技巧
- MYSQL中的FROM_UNIXTIME,再也不用担心时间戳。