hdu3478(图的联通+二分图判断)
来源:互联网 发布:linux who命令 编辑:程序博客网 时间:2024/05/17 03:48
链接:点击打开链接
题意:判断某一时刻可不可能走到任意一个点
代码:
#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int par[200005],ran[200005],x[500005],y[500005];void init(int n){ int i; for(i=0;i<=n+2;i++) par[i]=i;}int found(int x){ if(par[x]!=x) par[x]=found(par[x]); return par[x];}void unite(int x,int y){ x=found(x); y=found(y); if(x==y) return; if(ran[x]<ran[y]) par[x]=y; else{ par[y]=x; if(ran[x]==ran[y]) ran[x]++; }}bool same(int x,int y){ return found(x)==found(y);}int judge1(int n,int m){ int i,sum; sum=0; init(n); for(i=0;i<m;i++) unite(x[i],y[i]); for(i=0;i<n;i++) if(par[i]==i) sum++; if(sum==1) return 1; return 0;} //并查集判断图是否联通int judge2(int n,int m){ int i; init(2*n); unite(x[0],y[0]+n); unite(y[0],x[0]+n); for(i=1;i<m;i++){ if(same(x[i],y[i])||same(x[i]+n,y[i]+n)) return 0; unite(x[i],y[i]+n); unite(y[i],x[i]+n); } return 1;} //并查集判断是否是二分图int main(){ //因为二分图永远无法走到自己一边的点,因此 int t,n,m,st,i,j,k,cas; //问题就变为判断是否是二分图 scanf("%d",&t); for(cas=1;cas<=t;cas++){ scanf("%d%d%d",&n,&m,&st); for(i=0;i<m;i++) scanf("%d%d",&x[i],&y[i]); if(!judge1(n,m)){ printf("Case %d: NO\n",cas); continue; } if(judge2(n,m) ) printf("Case %d: NO\n",cas); else printf("Case %d: YES\n",cas); } return 0;}
0 0
- hdu3478(图的联通+二分图判断)
- hdu3478 Catch (二分图判断)
- HDU3478 【判奇环/二分图的性质】
- poj 2942 (点双联通+判断二分图)
- poj 2942 (点双联通+判断二分图)
- poj 2942 求点双联通+二分图判断奇偶环+交叉染色法判断二分图
- 二分图的判断
- 二分图的判断
- hdu 3478 //判联通+二分图判定
- hdu4751 二分图的判断
- 二分图的判断--染色
- 两个数字判断图是否联通
- hdu 1268(判断图是否强联通)
- 图的弱联通
- 有向图的强联通tarjan算法(判断是否为强联通模板)(hdu1269)
- 图方法:二分无向图的联通子图查找
- 强联通图判断 裸强联通判断 hdu Problem-1269 迷宫城堡
- 二分图的判断和二分图最大匹配模板
- 洗盘子
- 一个异常的反思
- 自定义view画图
- 《转 - 雨中奔跑 2》 git分支branch详解
- IOS 面试可能会问到的知识点
- hdu3478(图的联通+二分图判断)
- 串行AD芯片ADC12S021的时序问题
- macbook上误删iphone模拟器
- js中使用另外一个js文件的变量
- Dialog对话框
- Codeforces Round #Pi (Div. 2) A~D 题解B C D
- QQ登录
- 我的2013-从GIS学生到GIS职业人的飞跃
- Android之三种Menu的使用与分析