小希的迷宫 HDU
来源:互联网 发布:台风战斗机知乎 编辑:程序博客网 时间:2024/05/18 01:10
F - 小希的迷宫
HDU - 1272题意:满足任意两个房间有且仅有一条路径可以相通(除非走了回头路)。
思路:判断整个图是否只有一个并查集,同时也要满足路数等于房间数减一。
注意:只输入0 0的情况输出“Yes”。
代码:
#include<stdio.h>#include<string.h>int a[100001],f[100001],lu[1000001],b[1000001];struct yun{ int u,v;}p[1000001];int getf(int u){ if(f[u]!=u) f[u]=getf(f[u]); return f[u];}void merge(int u,int v){ int t1=getf(u),t2=getf(v); if(t1!=t2) f[t2]=t1; return ;}int main(){ int a1,a2,i,j,s,c,d,sum,u; while(~scanf("%d%d",&a1,&a2)&&a1!=-1&&a2!=-1) { if(a1==0&&a2==0)//只输入“0 0”时输出“Yes”。 { printf("Yes\n"); continue; } memset(lu,0,sizeof(lu)); a[1]=a1;a[2]=a2;//将输入的第一组数据赋值给数组a. lu[a1]=1;lu[a2]=1;//将输入的第一组数据标记。 p[1].u=a1;p[1].v=a2;//将输入的第一组数据赋值给结构体数组p。 j=2;s=2; for(j=2,s=2,u=3;;j++) { scanf("%d%d",&c,&d); if(c==0&&d==0)break; p[j].u=c;p[j].v=d;//将输入的数据赋值给结构体数组p。 if(!lu[c])//将输入的数据标记,记录房间个数,再将数据赋值给数组a. { lu[c]=1; s++; a[s]=c; } if(!lu[d])//将输入的数据标记,记录房间个数,再将数据赋值给数组a. { lu[d]=1; s++; a[s]=d; } } int t=j,e=s;//t-1为边数,e为房间数。 for(i=1;i<=e;i++)//将f数组赋初值。 f[a[i]]=a[i]; for(j=1;j<t;j++)//并查集 merge(p[j].u,p[j].v); sum=0; for(i=1;i<=e;i++) if(f[a[i]]==a[i])//判断有几个并查集。 sum++; if(sum!=1)printf("No\n"); else { if(s==t) printf("Yes\n"); else printf("No\n"); } }}
阅读全文
0 0
- 小希的迷宫 hdu
- HDU 小希的迷宫
- 小希的迷宫 HDU
- 小希的迷宫 HDU
- 小希的迷宫 HDU
- 小希的迷宫 HDU
- 小希的迷宫 HDU
- 小希的迷宫 HDU
- 小希的迷宫 hdu 1272
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU 1273 小希的迷宫
- hdu 小希的迷宫 5.1.2
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU-1272-小希的迷宫
- HDU 1272 小希的迷宫
- [tree]hdu 1272 小希的迷宫
- 深入分析C语言中结构体指针的定义与引用详解
- .mpp的一种查看方法
- 通过jq选择器dom操作获得焦点
- php+jquery+ajax滚动条滚动到底部自动加载,简单实现瀑布流
- Cocoapods搜不到库的问题
- 小希的迷宫 HDU
- Kotlin入门(8)空值的判断与处理
- Jquery多选、反选、批量
- caffe 学习之 Fine-tune
- C++静态成员变量和静态成员函数的使用方法总结
- Android5.0新控件CardView的介绍和使用
- Storm单机环境部署文档
- 解决Springboot中Interceptor拦截器中依赖注入失败
- [3]java微信开发-获取access_token