HDU
来源:互联网 发布:js中div显示隐藏 编辑:程序博客网 时间:2024/06/03 19:08
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1272
分析:要符合小希的想法则必须满足两个条件,一是图是连通的,二是不存在环。这样才能是两点之间存在唯一一条通路,说白了就是一无向连通无环图。用并查集判断是否有环,同时统计图的边和点的个数,必须满足num(vertex)+1=num(edge)。注意考虑图为空的情况。(坑啊)
代码:
#include<iostream>#include<cstring>using namespace std;const int maxn = 1e5+10;int flag[maxn],pre[maxn];void init(){ for(int i=1;i<=maxn;pre[i]=i,i++);}int Find(int x){ while(x!=pre[x]) x=pre[x]; return x;}void input(){ int room1,room2; while(cin>>room1>>room2){ if(room1==-1&&room2==-1) break; if(room1==0&&room2==0){///空树!!!特殊情况没考虑到wa了好几次 cout<<"Yes"<<endl; continue; } init(); memset(flag,0,sizeof(flag)); int edge=1,point=0,circle=0; flag[room1]++; flag[room2]++; if(Find(room1)==Find(room2)) circle=1; else pre[Find(room1)]=Find(room2); while(cin>>room1>>room2&&(room1||room2)){ edge++; flag[room1]++; flag[room2]++; if(Find(room1)==Find(room2)) circle=1; else pre[Find(room1)]=Find(room2); } for(int i=1;i<maxn;i++) if(flag[i]) point++; if(!circle&&point==edge+1) cout<<"Yes"<<endl; else cout<<"No"<<endl; }}int main(){ input();}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 【安全牛学习笔记】利用配置不当提权
- Android轻松实现代码混淆
- java共享锁实现原理及CountDownLatch解析
- tesseract-ocr 4.0 安装及使用
- Redis 启动报错: Creating Server TCP listening socket *:6379: bind: Address already in use
- HDU
- 仿 bilibili 搜索框效果(三句代码实现)
- 9月14日云栖精选夜读:揭秘IPHONE X刷脸认证的技术奥秘
- Docker网络配置初探
- 用python实现一个清理工具的代码
- Jquery EasyUI 按钮控制面板显示与隐藏demo(1)
- 身份认证与session对象
- jsp一改动,就需要重启的解决方案
- OpenCV 编译出的so库改名办法