HDU-1272-小希的迷宫
2012-08-25 19:05
253 查看
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1272
/*
程序分析:
题目意思其实就是让你判断一个图是不是一棵树,条件就是无环、连通图,即连通分支为一
解决方法:
利用并查集,把输入的房间视为一个点,有路径的就连成一起,只要找到了环,就可以判定为NO了,
如果到输入最后都还没找到环就只剩两种可能了,一种就是只有一棵书,一种就是有一个以上的树,这样也可以判定是否符合问题要求了。
*/
View Code
/*
程序分析:
题目意思其实就是让你判断一个图是不是一棵树,条件就是无环、连通图,即连通分支为一
解决方法:
利用并查集,把输入的房间视为一个点,有路径的就连成一起,只要找到了环,就可以判定为NO了,
如果到输入最后都还没找到环就只剩两种可能了,一种就是只有一棵书,一种就是有一个以上的树,这样也可以判定是否符合问题要求了。
*/
View Code
#include<iostream> #include<string> using namespace std; bool used[100001]; int r[100001]; int find(int x) { while(r[x]!=x) x=r[x]; return x; } int uni(int x,int y) { x=find(x); y=find(y); if(x=y)return 0; r[x]=y; return 1; } int main() { int n,m,flag,i,t; while(cin>>n>>m) { if(n==-1&&m==-1)return 0; if(n==0&&m==0) { cout<<"Yes\n"; continue; } memset(used,0,sizeof(used)); for(i=0;i<100001;i++) { r[i]; } uni(n,m); used =used[m]=1;t=1; flag=1; while(cin>>n>>m) { if(n==0&&m==0)break; if(used ==0){t++;used =1;} if(used[m]==0){t++;used[m]=1;} if(uni(n,m)==0)flag=0; else t--; } if(flag&&t==1)cout<<"Yes\n"; else cout<<"No\n"; } return 0; }
相关文章推荐
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫 并查集
- HDU1272 小希的迷宫 并查集
- Hdu1272 小希的迷宫 【并查集】
- hdu 1272 小希的迷宫
- hdu 1272:小希的迷宫
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集)
- HDU1272小希的迷宫--并查集入门题
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu1272 小希的迷宫 (并查集)
- HDU 1272 小希的迷宫
- Graph Theory NO.2 HDU_1272_小希的迷宫_并查集
- HDU1272 小希的迷宫
- HDU 1272小希的迷宫
- HDU-1272-小希迷宫
- HDU1272 小希的迷宫(并查集+数据坑)
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫