HDU.5215.Cycle(判环)
\(Description\)
给定\(n\)个点\(m\)条边的无向图,问是否存在一个长度为奇数/偶数的简单环。
\(n\leq 10^5,m\leq 3\times 10^5\)。
\(Solution\)
容易想到DFS时直接黑白染色。但是只这样会遗漏一种偶环。
对于奇环黑白染色即可,二分图一定不存在奇环,存在奇环一定不是二分图。
对于偶环,因为两个奇环如果有至少一个公共点,它们都去掉公共部分后奇偶性仍相同,就会形成偶环。
所以对于奇环暴力在点上打标记即可。
也可以Tarjan缩每个双连通分量,只有在这个双连通分量仅是一个奇环时,其中不存在偶环。
但是判负环时要判p!=0结束循环?why??
//93MS 11940K
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
const int N=1e5+5,M=6e5+5;
int Enum,H[N],nxt[M],to[M],vis[N],fa[N];
bool odd,even,tag[N];
char IN[MAXIN],*SS=IN,*TT=IN;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AE(int u,int v)
{
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
void DFS(int x)
{
for(int i=H[x],v; i; i=nxt[i])
if((v=to[i])!=fa[x])
{
if(vis[v]==-1) fa[v]=x, vis[v]=vis[x]^1, DFS(v);
else if(vis[x]^vis[v]) even=1;
else
{
odd=1; int p=x;
while(!even && p!=v && p)//p!=0???
{
if(tag[p]) even=1;
tag[p]=1, p=fa[p];
}
// if(tag[v]) even=1;//最上面的点...无所谓了?
// else tag[v]=1;
}
}
}
void Work()
{
odd=even=Enum=0, memset(H,0,sizeof H);
memset(vis,0xff,sizeof vis), memset(tag,0,sizeof tag);
int n=read(),m=read();
while(m--) AE(read(),read());
for(int i=1; i<=n&&(!odd||!even); ++i)
if(vis[i]==-1) vis[i]=fa[i]=0, DFS(i);
puts(odd?"YES":"NO"), puts(even?"YES":"NO");
}
int main()
{
for(int T=read(); T--; Work());
return 0;
}
HDU.5215.Cycle(判环)的更多相关文章
- HDU 5215 Cycle(dfs判环)
题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...
- hdu 5215 Cycle
题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...
- HDU 5154 Harry and Magical Computer 有向图判环
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5154 题解: 有向图判环. 1.用dfs,正在访问的节点标记为-1,已经访问过的节点标记为1,没有访 ...
- HDU 3342 Legal or Not(有向图判环 拓扑排序)
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 4324 Triangle LOVE(拓扑判环)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)
这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ...
- Legal or Not(拓扑排序判环)
http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others) ...
- HDUOJ--4888--Redraw Beautiful Drawings【isap】网络流+判环
链接:http://acm.hdu.edu.cn/showproblem.php? pid=4888 题意:一个矩阵.限定每行行和.列和,每一个格子数字不超过k,问矩阵是否存在,如存在推断有单解还是多 ...
- hdu4888 Redraw Beautiful Drawings 最大流+判环
hdu4888 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/6553 ...
随机推荐
- python实战===教你用微信每天给女朋友说晚安
但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送”晚安“,故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起来更方便. 准备: ...
- 3种shell自动交互的方法【转】
一.背景 shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力 ...
- phantomjs 中如何使用xpath
function getNodeInfo(inputcsvPath) { var htmlnodeInfo = page.evaluate(function () { //_Ltg var XPATH ...
- llinux除了软连接本地文件夹同步:mount
mount --bind /srv/dir1 /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹
- H3C SNMP OID
有两种mib-style [1]老些的设备 cpu 使用率OID: .1.3.6.1.4.1.25506.2.6.1.1.1.1.6.slot 内存使用率OID: .1.3.6.1.4.1.2550 ...
- win10 安装硕正
提示权限不够,解决方法:根据提示路径手动在路径下建立文件夹
- 蝉知CMS本地迁移到服务器具体步骤
蝉知迁移步骤(2个方案,二选一即可) 方案一(整个chanzhi(eps)目录拷贝,假设新安装的蝉知文件夹名称为chanzhieps): 1.在新服务器上安装相同版本(版本号必须一致)的蝉知(安装文档 ...
- Java基础96 ajax技术的使用
本文知识点(目录): 1.ajax的概念 2.使用ajax技术获取服务端的数据_实例 3.使用ajax技术检查用户名是否已存在_实例 4.使用ajax技术验证登录页面的用户名和密码_实例 ...
- tcpdump使用示例
前言 这段时间一直在研究kubernetes当中的网络, 包括通过keepalived来实现VIP的高可用时常常不得不排查一些网络方面的问题, 在这里顺道梳理一下tcpdump的使用姿势, 若有写的不 ...
- php计算给定时间之前的函数
这里给定一个时间,计算这个时间在多久前,比如:2天前,1年前 function prettyDate($date){ $time = strtotime($date); $now = time(); ...