HDU-5215 Cycle 无向图判奇环偶环
题意:给一个无向图,判断这个图是否存在奇环和偶环。
解法:网上有一种只用dfs就能做的解法,但是我不太理解。
这里用的是比较复杂的。首先奇环很简单可以用二分图染色判断。问题是偶环怎么判断?这里我们想,一旦有两个环共享了一些点,那么这两个环一定能组成一个偶环。
那么我们考虑tarjan找出所有桥删去,那么对于一个边双联通分量,这个边双只要有多于一个环就必定存在偶环。即当且仅当这个边双为一个奇环的情况下才不存在偶环,其他情况都会有偶环。
所以一旦这个边双不是单环,就必定存在偶环。
那么怎么判断这个是不是一单个环呢?点数=边数的时候就是一个单环。
细节详见代码:
#pragma comment(linker,"/STACK:102400000,102400000")
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+;
int n,m,ver,edge,odd,even,col[N];
bool bridge[N]; int cnt=,head[N<<],nxt[N<<],to[N<<];
void add_edge(int x,int y) {
nxt[++cnt]=head[x]; to[cnt]=y; head[x]=cnt;
} int num,low[N],dfn[N];
void tarjan(int x,int in) {
dfn[x]=low[x]=++num;
for (int i=head[x];i;i=nxt[i]) {
int y=to[i];
if (!dfn[y]) {
tarjan(y,i);
low[x]=min(low[x],low[y]); if (low[y]>dfn[x])
bridge[i]=bridge[i^]=;
} else if (i!=(in^))
low[x]=min(low[x],dfn[y]);
}
} void dfs(int x,int fa) {
col[x]=-col[fa]; ver++;
for (int i=head[x];i;i=nxt[i]) {
if (bridge[i]) continue;
int y=to[i]; edge++;
if (y==fa) continue;
if (!col[y]) dfs(y,x);
else if (col[x]==col[y]) odd=; else even=; //染色过程判断奇偶环
}
} int main()
{
int T; cin>>T;
while (T--) {
cin>>n>>m;
cnt=; for (int i=;i<=n;i++) head[i]=;
for (int i=;i<=m;i++) {
int x,y; scanf("%d%d",&x,&y);
add_edge(x,y); add_edge(y,x);
} num=; for (int i=;i<=n;i++) dfn[i]=low[i]=;
for (int i=;i<=n;i++)
if (!dfn[i]) tarjan(i,); //找桥 odd=even=;
for (int i=;i<=n;i++) col[i]=; col[]=;
for (int i=;i<=n;i++)
if (!col[i]) {
ver=; edge=;
dfs(i,);
if (ver> && edge/!=ver) even=; //点数和边数不等,存在偶环
}
printf("%s\n",odd?"YES":"NO");
printf("%s\n",even?"YES":"NO");
for (int i=;i<=cnt;i++) bridge[i]=;
}
return ;
}
HDU-5215 Cycle 无向图判奇环偶环的更多相关文章
- HDU 5215 Cycle(dfs判环)
题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...
- hdu 5215 Cycle
题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...
- HDU.5215.Cycle(判环)
题目链接 \(Description\) 给定\(n\)个点\(m\)条边的无向图,问是否存在一个长度为奇数/偶数的简单环. \(n\leq 10^5,m\leq 3\times 10^5\). \( ...
- HDU - 3478 Catch(判奇环/二分图)
http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意 给一个无向图和小偷的起点,小偷每秒可以向相邻的点出发,问有没有一个时间点小偷可能出现在任何点. 分析 ...
- HDU 5215 BestCoder"杯中国大学生程序设计冠军赛” 边双连通分量取出子图+二分染色判图内奇偶环
Cycle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- HDU3478 【判奇环/二分图的性质】
题意: 给你一幅图,给你一个起点,然后问你存不存在一个时刻,所有点可以在那个时刻到达. 思路: 这幅图首先是联通的: 如果出现奇数环,则满足在某一时刻都可能到达: 然后判断奇数环用二分图性质搞也是神奇 ...
- 【POJ 2942】Knights of the Round Table(双联通分量+染色判奇环)
[POJ 2942]Knights of the Round Table(双联通分量+染色判奇环) Time Limit: 7000MS Memory Limit: 65536K Total Su ...
- POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)
POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...
- js实现四舍六入 奇进偶舍
function PointFloat(src, pos) { return Math.round(src * Math.pow(10, pos)) / Math.pow(10, pos); } // ...
随机推荐
- hashRouter and BrowserRouter
<html><body> <div> <button class="btn" onclick="btnFun();"& ...
- 【转载】POST/GET请求中RequestBody和RequestParam的应用场景
原文链接:https://blog.csdn.net/justry_deng/article/details/80972817 原文链接:https://www.jianshu.com/p/49819 ...
- yum 仓库搭建与源码包安装实战
目录 一.yum 仓库自建示例: 二.源码包安装实践 基础环境 服务端配置 下载及安装fpm软件 客户端: 一.yum 仓库自建示例: 1.安装ftp服务 yum -y install vsftpd ...
- Mysql 事务相关
MySQL介绍 什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它 ...
- H5 移动调试全攻略
H5 移动调试全攻略 随着移动设备的高速发展,H5 开发也成为了 F2E 不可或缺的能力.而移动开发的重中之重就是掌握调试技巧,定 Bug于无形. 一.概要 因为移动端操作系统分为 iOS 和 And ...
- 静态部署TOMCAT
常见部署方式:静态部署和容器化部署 一.下载tomcat安装包 下载地址:https://tomcat.apache.org/download-90.cgi 图上是显示最新版本,而我下载的是9.0.8 ...
- php图片无损压缩的问题解决
代码如下 <?php namespace App\Contract; use Carbon\Carbon; /** * 图片压缩封装类 * @author jackie <2019.11. ...
- springboot 依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- shell读取文件第一行和最后一行,小数的运算比较
1. 读取文件的第一行:head -n +1 file.txt 读取文件的最后一行: tail -n -1 file.txt echo 12:30:55 | cut -d: -f 1 结果为12,意思 ...
- Mysql查看编码方式
查看数据库的字符集 show variables like 'character\_set\_%'; 输出: +--------------------------+--------+ | Varia ...