hdu 1272 小希的迷宫 并查集
2016-04-12 21:51
441 查看
题意:判断一张图是否联通且无环。
若一条边的两个节点为同一个父节点,则成环。若所有的节点的父节点相同则联通。注意输入0 0时为Yes。
拓展:改为有向图hdu1325
若一条边的两个节点为同一个父节点,则成环。若所有的节点的父节点相同则联通。注意输入0 0时为Yes。
拓展:改为有向图hdu1325
#include <iostream> #include<cstdio> #include<cstring> #include<cmath> #define N 110000 using namespace std; int flag,pre ,vis ,maxn; void init() { for(int i=0;i<N;i++) pre[i]=i; flag=1; maxn=0; memset(vis,0,sizeof(vis)); } int findset(int v) { int t1,t2=v; while(v!=pre[v]) v=pre[v]; while(t2!=v) { t1=pre[t2]; pre[t2]=v; t2=t1; } return v; } void unions(int u,int v) { int t1=findset(u); int t2=findset(v); if(t1==t2) flag=0; else pre[t1]=t2; } int main() { int u,v; init(); while(~scanf("%d%d",&u,&v)&&!(u==-1&&v==-1)) { if(u==0&&v==0) { int tp=0; for(int i=1;i<=maxn;i++) if(vis[i]&&pre[i]==i) tp++; if(flag&&tp<=1) cout<<"Yes"<<endl; else cout<<"No"<<endl; init(); continue; } vis[u]=vis[v]=1; maxn=max(maxn,max(u,v)); if(u!=v) unions(u,v); } }
相关文章推荐
- 希尔排序(Shell Sort)
- 大家一起和snailren学java-(13)字符串
- Android动画——按钮动画的代码
- 判断两个链表是否相交并找出交点-笔记
- 手机APP大用户并发测试
- Android-ListView的图文列表显示
- 【数据结构与算法】String大数加减乘除(非负整数)
- pthread
- 【day0412 C++】顺序容器 STL list类的应用
- c++作业三
- IOS 友盟使用详解
- git undo last commit
- android view的一些常用触发方法
- shader三种变量类型(uniform,attribute和varying)
- poj1185 炮兵阵地(状态压缩dp)
- 练习二1001
- noSql-Hbase-php读写操作hbase数据库的基本方法
- 合并Log的右键操作功能添加
- Struts2中利用filter、session实现安全访问和身份认证
- 9、linux的常用小技巧