HDU 1232 畅通工程 (并差集)
来源:互联网 发布:看看电视剧的软件 编辑:程序博客网 时间:2024/05/16 12:26
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232
代码:
#include <iostream>#include <string.h>#include <set>#include<stdio.h>using namespace std;int pre[1005];int n;int father(int n){ int tf = (pre[n] == n) ? n : father(pre[n]); pre[n] = tf; return pre[n];}void unin(int a, int b){ int fa = father(a); int fb = father(b); if (fa == fb) { return; } if (fa < fb) { pre[fb] = fa; } else { pre[fa] = fb; }}void init(){ for(int i=1;i<=n;i++) pre[i]=i;}int main(){ int m,x,y; while(~scanf("%d",&n)) { if(n==0) return 0; scanf("%d",&m); bool ans[1005]; //memset(pre,0,sizeof(pre)); memset(ans,0,sizeof(ans)); init(); for(int i=0; i<m; i++) { scanf("%d%d",&x,&y); //if(x<=n&&y<=n) { unin(x,y); //unin(y,x); } } /*for(int i=1;i<=n;i++) { printf("%d ",pre[i]); }*/ for(int i=1; i<=n; i++) { ans[father(i)]=1; //刚开始是pre[i],无限WA。但为什么是father(i)呢? } int ok=0; for(int i=1; i<=n; i++) { if(ans[i]==1) ok++; } cout<<ok-1<<endl; /* set<int> rs; for (int i = 1; i <= n; i++) { rs.insert(father(i)); } printf("%d\n", rs.size() - 1); */ }}
找到了 好像是输入数据的点大于n。即存在 5 1 1 6这种情况。玩心机呀。
所以不能标记pre[i],因为1与6连的时候,pre[1]=0.
0 0
- HDU 1232 畅通工程 (并差集)
- 畅通工程(并差集)
- 关于并差集 Hurstoj 1073病毒 hdu畅通工程
- 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 畅通工程
- Design Pattern - Behavioral Patterns - Observer Pattern
- Android AVD创建以及设置各个参数的详解
- LeetCode 189. Rotate Array
- (知识分享)软硬件调试九法:第八条规则 求助他人, 获得全新观点
- ssl家谱 并查集
- HDU 1232 畅通工程 (并差集)
- LeetCode 27. Remove Element
- Linux文件上传工具下载工具及详细使用说明
- Ubuntu 14.04 LTS备份iso镜像
- 按钮点击事件的三种写法
- 深入学习计算机系统(2版)笔记
- WebSocket vs REST
- iOS图片轮播器的使用
- LeetCode 283. Move Zeroes