小希的迷宫(并查集,未知点,限定一个老大,判断是否有圈)
2015-07-04 18:23
411 查看
/* 这一题是并查集的知识 常规的并查集是让你找是否连成圈或者连成几个圈或者让你找老大的个数 这一题是让你在一个老大的情况下(需要判断)判断是否存在圈的问题! 还有就是这一题没有告诉你有几个点,所以你需要将已知的点标记一下! 一开始我只想着判断是否有圈去了,其实老大跟圈是没有一点关系的! 老大多了也可以没有一个圈! */ #include<cstdio> #include<iostream> #include<cstring> const int maxs=100010; using namespace std; int a[maxs],vis[maxs],flag; int Find(int x) { int r=x; while(r!=a[r]) r=a[r]; return r; } void mix(int x,int y) { int fx=Find(x),fy=Find(y); if(fx!=fy) { a[fy]=fx; } else { flag=1; } } int main() { int b,c,i,num; while(scanf("%d%d",&b,&c)) { num=flag=0; if(b==-1&&c==-1) { break; } if(b==0&&c==0) { printf("Yes\n"); continue; } for(i=1;i<maxs;i++) { a[i]=i; vis[i]=0; } vis[b]=vis[c]=1;//标记访问的点! mix(b,c); while(scanf("%d%d",&b,&c),(b+c)) { vis[b]=vis[c]=1; mix(b,c); } for(i=1;i<maxs;i++) { if(vis[i]&&a[i]==i) { num++; } if(num>1) { break; } } if(!flag&&num<=1) { printf("Yes\n"); } else { printf("No\n"); } } }
相关文章推荐
- ZOJ Problem Set - 2136 Longest Ordered Subsequence
- RecyclerView实现瀑布流效果(二)
- python基础课程_学习笔记21:文件和材料
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
- 密集负载下的网卡中断负载均衡smp affinity及单队列RPS
- scala
- Android 知识点收藏
- 【深度优先搜索】HDU 2553 N皇后问题
- C++ inline函数
- JavaWeb学习笔记——开发动态WEB资源(五)servlet身份验证
- Android ListView 数据混乱
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 克隆git仓库
- hdu 4941 Magical Forest
- C++ QT中的QSound使用方法
- Linux内网环境DNS修改域名指向,JAVA应用程序能否实时切换的问题总结
- avalonjs 实现简单购物车
- asterisk 能打电话的配置
- Tip:Exchange 2010服务器激活
- yourphp读取分类名称{$Categorys[$r[catid]]['catname']}