hdoj1272 小希的迷宫
2016-07-04 08:27
316 查看
并查集
= =、一开始判断连通,没有判断环,后来判断了环,没有判断连通。。。
还有就是一开始是0 0,也是Yes,有道理么?我不是很懂。。
= =、一开始判断连通,没有判断环,后来判断了环,没有判断连通。。。
还有就是一开始是0 0,也是Yes,有道理么?我不是很懂。。
#include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <math.h> #include <algorithm> using namespace std; #define LL long long const double pi = acos(-1.0); #define Len 200005 #define mod 19999997 const int INF = 0x3f3f3f3f; #define exp 1e-6 #define N 100020 int pre ; bool vis ; void init() { for(int i=1;i<=100000;i++) pre[i]=i; memset(vis,0,sizeof(vis)); } int Find(int u) { int r=u; while(r!=pre[r]) { r=pre[r]; } int i=u,j; while(pre[i]!=r) { j=pre[i]; pre[i]=r; i=j; } return r; } int main() { int a,b,aa,bb; while(1) { init(); int flag=0; scanf("%d%d",&a,&b); if(a==-1&&b==-1) break; if(!a&&!b) { printf("Yes\n"); continue; } vis[a]=vis[b]=1; aa=Find(a); bb=Find(b); if(aa!=bb) pre[aa]=bb; else flag=1; while(1) { scanf("%d%d",&a,&b); if(!a&&!b) break; vis[a]=vis[b]=1; aa=Find(a); bb=Find(b); if(aa!=bb) pre[aa]=bb; else flag=1; } int cnt=0; for(int i=1;i<=100000;i++) { if(pre[i]==i&&vis[i]) { cnt++; } } if(!flag&&cnt==1) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- java制作透明窗体(类似PS欢迎界面 )
- 1141 数列
- 动画api说明
- 【分治基础】小车问题
- 那些你不愿说给领导的话
- MySQL单表百万数据记录分页性能优化
- 【bzoj1051】【HAOI2006】【受欢迎的牛】【强连通分量】
- OS X 10.11.5 Scrapy安装指南
- Jam的计数法(codevs 1140)
- 深入理解MySQL开发性能优化.pptx
- 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
- 富文本编辑器
- 勾股定理一日一证连载42
- 加密狗的简单实用
- 2016年团体程序设计天梯赛-初赛 - 抢红包
- Win7开机蓝屏错误atikmpag.sys的解决方法
- 通道、设备、设备控制器三者间关系
- 知识点5-6
- SSH免密登录配置步骤
- EJB通用元数据注解