HDU 1232 畅通工程 (并查集解法)
来源:互联网 发布:如何申请淘宝号 编辑:程序博客网 时间:2024/05/17 02:14
1.这道题可以用并查集来做。
2.题目的大意是:给你一个N,表示有多少个点,这些点从1到N标记;再给你一个M,表示连接这些点的线数,后面有M行,表示哪些点之间是相通的。
问你有多少个不同的祖先数(注意最后要减去一,因为一个祖先就不用画线,两个祖先就画一条线……N个祖先画N-1条线)
3.并查集的find函数用了压缩路径的非递归形式,不过应该也可以不用路径压缩,毕竟数不大(N是小于1000的)
#include <bits/stdc++.h>using namespace std;const int MAXN=1010;int pre[MAXN];int N,M;int cnt;int found(int x){ int k,j,r; r=x; while(r!=pre[r]) //找祖先 { r=pre[r]; } k=x; while(k!=r) // 非递归压缩路径 { j=pre[k]; pre[k]=r; k=j; } return r;}void join(int x,int y) // 将道路连接起来{ int fx=found(x); int fy=found(y); if(fx!=fy) { pre[fx]=fy; --cnt; }}int main(){ while(cin>>N&&N) { cnt=N-1; //把这些点最初看成非连接的,那么就有N个独立的点,那么连接这些点最少需要N-1条线 cin>>M; for(int i=1;i<=N;i++) pre[i]=i; for(int i=1;i<=M;i++) { int x,y; cin>>x>>y; join(x,y); } cout<<cnt<<endl; }}
没什么要注意的了……就这么多 其实可以用连同块来写,等我写出来了再发表出来
阅读全文
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 畅通工程 <并查集>
- Mybatis Generator最完整配置详解
- H
- java集成微信支付接口(微信V3版)
- JAVA面试题:棋子翻转
- hdp2.5离线安装笔记
- HDU 1232 畅通工程 (并查集解法)
- 噪声图像的超分辨重建
- js实现时钟
- [搜索算法]三分搜索初步
- 获取 Git 仓库
- 如何看待虚拟现实
- CXX0017与CXX0033错误
- Android 上传多张图片
- Java IO流学习总结