HDU 1272小希的迷宫
2013-04-28 23:55
190 查看
[align=left]Problem Description[/align]
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。 View Code
一开始做这题我一直忽视了一个问题,就是我只判断 了是否成环而没有判断到底有没有成树,题目要求是所有的点都要相通,所以必须要做这个判断。第二,不知道为什么要把前面输入的那个点作为parent数组的上标,而要把后面输入的那个点作为下标,否则就会RE。
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。 View Code
#include<stdio.h> #include<string.h> int parent[100005]; int visit[100005]; int find(int i,int x) { if(i==x) return i; else return parent[x]=find(x,parent[x]); } int main() { int x,y; while(scanf("%d%d",&x,&y)&&(x!=-1||y!=-1)) { memset(visit,0,sizeof(visit)); for(int i=0;i<=100000;++i) parent[i]=i; int biaoji=1,sum1=0,sum2=0; if(x==0&&y==0) sum1++; while(x!=0||y!=0) { if(visit[x]==0) { sum1++; visit[x]=1; } if(visit[y]==0) { sum1++; visit[y]=1; } int f1=find(x,parent[x]); int f2=find(y,parent[y]); if(f1!=f2) { parent[f2]=f1; sum2++; } else biaoji=0; scanf("%d%d",&x,&y); } if(sum1-1!=sum2) biaoji=0; printf(biaoji? "Yes\n":"No\n"); } return 0; }
一开始做这题我一直忽视了一个问题,就是我只判断 了是否成环而没有判断到底有没有成树,题目要求是所有的点都要相通,所以必须要做这个判断。第二,不知道为什么要把前面输入的那个点作为parent数组的上标,而要把后面输入的那个点作为下标,否则就会RE。
相关文章推荐
- hdu 1272 小希的迷宫
- 小希的迷宫 hdu 1272(并查集)
- HDU 1272 小希的迷宫(并查集)
- HDU 1272--小希的迷宫【并查集,有值得注意的地方】
- hdu——1272——小希的迷宫(数)
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- hdu1272_小希的迷宫
- HDU 1272 小希的迷宫
- hdu-1272 小希的迷宫
- HDU-1272 小希的迷宫(并查集)
- Hdu1272 小希的迷宫 【并查集】
- HDU 1272 小希的迷宫 (并查集)
- hdu-1272小希的迷宫
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- HDU1272-小希的迷宫
- HDU - 1272 小希的迷宫
- HDU-1272-小希的迷宫(并查集)
- hdu 1272 小希的迷宫(并查集)