HDUOJ------(1272)小希的迷宫
2013-11-02 22:38
232 查看
小希的迷宫
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21080 Accepted Submission(s): 6449[align=left]Problem Description[/align]
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。
#include<iostream> #include<vector> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxn=100001; int father[maxn+2],rank[maxn+2]; struct nod { nod(int m,int n):a(m),b(n){}; int a,b; }; void init(int n) { for(int i=1;i<=n;i++) { father[i]=i; rank[i]=1; } } int setfind(int x) { /*如果root不为自己,那就去找最原始的root*/ if(x!=father[x]) { father[x]=setfind(father[x]); } return father[x]; } void collect(int x, int y) { x=setfind(x); y=setfind(y); if(x!=y) { if(rank[x]>rank[y]) { father[y]=x; rank[x]+=rank[y]; } else { father[x]=y; rank[y]+=rank[x]; } } } int main() { int a,b,max,i; /*freopen("test.in","r",stdin);*/ while(1) { vector<nod>sa; max=0; scanf("%d%d",&a,&b); if(a==-1&&b==-1) return 0; while(a+b) { int temp=a>b?a:b; if(max<temp) max=temp; nod str(a,b); sa.push_back(str); scanf("%d%d",&a,&b); } int len=sa.size(); if(len==0) { puts("Yes"); continue; } init(max); vector<nod>::iterator it; for(it=sa.begin();it!=sa.end();it++) { /*printf("%d%d",(*it).a,it->b);*/ collect((*it).a,it->b); } int anst=0,pos,ansa=0; for( i=1;i<=max;i++) { /* printf("%d",father[i]);*/ if(anst<rank[i]) { anst=rank[i]; pos=i; /*确定root*/ } if(father[i]!=i) ansa++; } if(anst==ansa+1) /*是一棵树*/ { bool tag=true; for(i=1;i<=max;i++) { /*是否有循环的树*/ if(father[i]!=pos&&father[i]!=i) { tag=false; break; } } if(tag) printf("No\n"); else printf("Yes\n"); } else printf("No\n"); } return 0; }
View Code
相关文章推荐
- 魔兽世界mac版客户端台服国服互转简单方法
- 简述什么是JAVA中的多态
- Struts 2+Spring表单数据不能清空的解决方法
- POJ 2533 最长递增子序列
- 信息系统项目管理师考试经验谈 -- 转
- ERP与MES集成技术及其应用研究
- hdu-2317-Nasty Hacks
- 构造方法 静态修饰符
- 设计模式:命令模式(6)C++版
- Linux 目录和文件大小 du
- java反射
- 数据库范式
- java 方法基础
- C#基础笔记——泛型(Genericity)
- Qcon上海第二天参会总结
- &和&&的区别
- 获取Android设备唯一标识
- hdu-1712 分组背包问题
- 线程内核对象对比
- LEX规则