题目链接

\(Description\)

给定\(n\)个点\(m\)条边的无向图,问是否存在一个长度为奇数/偶数的简单环。

\(n\leq 10^5,m\leq 3\times 10^5\)。

\(Solution\)

容易想到DFS时直接黑白染色。但是只这样会遗漏一种偶环。

对于奇环黑白染色即可,二分图一定不存在奇环,存在奇环一定不是二分图。

对于偶环,因为两个奇环如果有至少一个公共点,它们都去掉公共部分后奇偶性仍相同,就会形成偶环。

所以对于奇环暴力在点上打标记即可。

也可以Tarjan缩每个双连通分量,只有在这个双连通分量仅是一个奇环时,其中不存在偶环。

但是判负环时要判p!=0结束循环?why??

  1. //93MS 11940K
  2. //#pragma comment(linker, "/STACK:102400000,102400000")
  3. #include <cstdio>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <algorithm>
  7. //#define gc() getchar()
  8. #define MAXIN 300000
  9. #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  10. const int N=1e5+5,M=6e5+5;
  11. int Enum,H[N],nxt[M],to[M],vis[N],fa[N];
  12. bool odd,even,tag[N];
  13. char IN[MAXIN],*SS=IN,*TT=IN;
  14. inline int read()
  15. {
  16. int now=0;register char c=gc();
  17. for(;!isdigit(c);c=gc());
  18. for(;isdigit(c);now=now*10+c-'0',c=gc());
  19. return now;
  20. }
  21. inline void AE(int u,int v)
  22. {
  23. to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
  24. to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
  25. }
  26. void DFS(int x)
  27. {
  28. for(int i=H[x],v; i; i=nxt[i])
  29. if((v=to[i])!=fa[x])
  30. {
  31. if(vis[v]==-1) fa[v]=x, vis[v]=vis[x]^1, DFS(v);
  32. else if(vis[x]^vis[v]) even=1;
  33. else
  34. {
  35. odd=1; int p=x;
  36. while(!even && p!=v && p)//p!=0???
  37. {
  38. if(tag[p]) even=1;
  39. tag[p]=1, p=fa[p];
  40. }
  41. // if(tag[v]) even=1;//最上面的点...无所谓了?
  42. // else tag[v]=1;
  43. }
  44. }
  45. }
  46. void Work()
  47. {
  48. odd=even=Enum=0, memset(H,0,sizeof H);
  49. memset(vis,0xff,sizeof vis), memset(tag,0,sizeof tag);
  50. int n=read(),m=read();
  51. while(m--) AE(read(),read());
  52. for(int i=1; i<=n&&(!odd||!even); ++i)
  53. if(vis[i]==-1) vis[i]=fa[i]=0, DFS(i);
  54. puts(odd?"YES":"NO"), puts(even?"YES":"NO");
  55. }
  56. int main()
  57. {
  58. for(int T=read(); T--; Work());
  59. return 0;
  60. }

HDU.5215.Cycle(判环)的更多相关文章

  1. HDU 5215 Cycle(dfs判环)

    题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...

  2. hdu 5215 Cycle

    题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...

  3. HDU 5154 Harry and Magical Computer 有向图判环

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5154 题解: 有向图判环. 1.用dfs,正在访问的节点标记为-1,已经访问过的节点标记为1,没有访 ...

  4. HDU 3342 Legal or Not(有向图判环 拓扑排序)

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  5. hdu 4324 Triangle LOVE(拓扑判环)

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  6. hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)

    这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ...

  7. Legal or Not(拓扑排序判环)

    http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others)   ...

  8. HDUOJ--4888--Redraw Beautiful Drawings【isap】网络流+判环

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=4888 题意:一个矩阵.限定每行行和.列和,每一个格子数字不超过k,问矩阵是否存在,如存在推断有单解还是多 ...

  9. hdu4888 Redraw Beautiful Drawings 最大流+判环

    hdu4888 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/6553 ...

随机推荐

  1. python实战===教你用微信每天给女朋友说晚安

    但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送”晚安“,故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起来更方便. 准备: ...

  2. 3种shell自动交互的方法【转】

    一.背景 shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力 ...

  3. phantomjs 中如何使用xpath

    function getNodeInfo(inputcsvPath) { var htmlnodeInfo = page.evaluate(function () { //_Ltg var XPATH ...

  4. llinux除了软连接本地文件夹同步:mount

    mount --bind /srv/dir1   /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹

  5. 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 ...

  6. win10 安装硕正

    提示权限不够,解决方法:根据提示路径手动在路径下建立文件夹

  7. 蝉知CMS本地迁移到服务器具体步骤

    蝉知迁移步骤(2个方案,二选一即可) 方案一(整个chanzhi(eps)目录拷贝,假设新安装的蝉知文件夹名称为chanzhieps): 1.在新服务器上安装相同版本(版本号必须一致)的蝉知(安装文档 ...

  8. Java基础96 ajax技术的使用

    本文知识点(目录): 1.ajax的概念   2.使用ajax技术获取服务端的数据_实例   3.使用ajax技术检查用户名是否已存在_实例   4.使用ajax技术验证登录页面的用户名和密码_实例 ...

  9. tcpdump使用示例

    前言 这段时间一直在研究kubernetes当中的网络, 包括通过keepalived来实现VIP的高可用时常常不得不排查一些网络方面的问题, 在这里顺道梳理一下tcpdump的使用姿势, 若有写的不 ...

  10. php计算给定时间之前的函数

    这里给定一个时间,计算这个时间在多久前,比如:2天前,1年前 function prettyDate($date){ $time = strtotime($date); $now = time(); ...