hdu 3478 Catch(判断奇数环)
来源:互联网 发布:js为标签添加属性 编辑:程序博客网 时间:2024/06/13 23:17
http://acm.split.hdu.edu.cn/showproblem.php?pid=3478
题目大意:
判断任意时刻,任意一个点是否都可以到达。
解题思路:要让从起点到任何点,那么就要判断是否存在奇数环,如果不存在奇数环,那么偶数步数的才能到达的点就不符合题目要求,即无解。因此就可以转变成判断是否存在奇数环,而如果所有点组成一个奇数环,那么所有点组成的图就是一个二分图,也就是判断这个图是否为二分图,用图的二染色解即可。
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int maxn=1000005;vector<int>g[maxn];int n,m,s,vis[maxn];bool bfs(){ int blag=0; queue<int>q; memset(vis,0,sizeof(vis)); q.push(s); vis[s]=1; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<g[u].size();i++) { int v=g[u][i]; if(vis[v]==0) { vis[v]=-vis[u]; q.push(v); } else if(vis[v]==vis[u]) blag=1; } } for(int i=0;i<n;i++) if(vis[i]==0) return false; return blag;}int main(){ int t,tt=1,u,v; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&s); for(int i=0;i<n;i++) g[i].clear(); while(m--) { scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); } printf("Case %d: %s\n",tt++,bfs()?"YES":"NO"); } }
阅读全文
0 0
- HDU 3478 Catch(判断奇数环)
- hdu 3478 Catch(判断奇数环)
- hdu 3478 Catch 二分图判断
- hdu 5215 Cycle(判断是否有奇数偶数的环)
- csu 1356 Catch (判断奇环)
- Catch hdu 3478
- hdu 3478 Catch
- HDU 3478 Catch
- 判断奇数
- 奇数判断
- 【染色法】hdu 3478 Catch
- HDU 2531 Catch him(BFS:判断是否存在路径)
- (hdu(1998)奇数阶魔方
- HDU-2006(求奇数的乘积)
- csu 1356: Catch(判断奇圈)
- CodeForces 216B Forming Teams(并查集判断奇数环)
- asp.net奇数判断
- 判断奇数偶数
- <Linux>压缩解压常用命令
- maven 的私库和镜像的配置
- Stanford nlp 初步之词性标注
- String类型
- Linux SPI总线设备驱动模型详解
- hdu 3478 Catch(判断奇数环)
- 使用栈进行进制转换
- liunx基本命令(十一)系统日志管理
- hdu5977 Garden of Eden
- 在屏幕上打印杨辉三角
- binary-tree-preorder-traversal java code
- 算法导论第4章习题解析
- 实验三 栈和队列的基本操作实现及其应用
- DockerHub基于Github自动化构建