题意

给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图。
n,m<=1000000

分析

只要把dfs树搞出来,然后把深度奇偶性相同的点放到同一集合,然后看有多少条连接同一个集合的边。通过树上差分可以求出每条边被多少条不满足的边包含,那么当我把这条边删掉后,若没有满足的边包含该边,那么所有包含这条边的不满足边就会变成满足边。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;const int N=1000005;int n,m,last[N],cnt,fa[N],dep[N],tot,f[N],g[N];
bool ans[N],vis[N];
struct edge{int to,next,tag;}e[N*2];int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}void addedge(int u,int v)
{e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt;e[++cnt].to=u;e[cnt].next=last[v];last[v]=cnt;
}void dfs(int x,int from)
{dep[x]=dep[fa[x]]+1;for (int i=last[x];i;i=e[i].next){if (i==(from^1)) continue;if (!dep[e[i].to]) fa[e[i].to]=x,dfs(e[i].to,i);else if (dep[e[i].to]>dep[x]) continue;else if (dep[e[i].to]%2==dep[x]%2) tot++,e[i].tag=e[i^1].tag=1,g[x]++,g[e[i].to]--;else f[x]--,f[e[i].to]--;}
}void solve(int x,int from)
{vis[x]=1;for (int i=last[x];i;i=e[i].next){if (vis[e[i].to]) continue;solve(e[i].to,i);f[x]+=f[e[i].to];g[x]+=g[e[i].to];}if (!f[x]&&g[x]==tot) ans[from/2]=1;
}int main()
{n=read();m=read();cnt=1;for (int i=1;i<=m;i++){int x=read(),y=read();addedge(x,y);}for (int i=1;i<=n;i++) if (!dep[i]) dfs(i,0);for (int i=1;i<=m;i++) if (e[i*2].to==e[i*2+1].to) tot--;if (!tot){printf("%d\n",m);for (int i=1;i<m;i++) printf("%d ",i);if (m) printf("%d",m);return 0;}if (tot==1) for (int i=2;i<=cnt;i+=2) if (e[i].tag) ans[i/2]=1;for (int i=1;i<=n;i++) if (!vis[i]) solve(i,0);int s=0,ls=0;for (int i=1;i<=m;i++) if (ans[i]) s++,ls=i;printf("%d\n",s);for (int i=1;i<=m;i++)if (ans[i]){printf("%d",i);if (i!=ls) putchar(' ');}return 0;
}

bzoj 4424: Cf19E Fairy dfs相关推荐

  1. [bzoj 4424]Cf19E Fairy

    给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成 一个二分图. 这道题还是不错的. 看到无向图的题目,应该一开始要往dfs树上面想.其实是因为最近吃够教训了 那么根据上 ...

  2. BZOJ 4424: Cf19E Fairy【强行树链剖分

    显然二分图只要没有奇环就好了 于是随便搞一棵生成树然后找出所有只包含一条非树边的环就好了 --发现求的就是所有奇环的交中不被任一偶环覆盖的边 注意如果只有一个奇环的话那条非树边也是合法答案 树链求交参 ...

  3. 【BZOJ4424】Cf19E Fairy DFS树

    [BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ...

  4. 4424: Cf19E Fairy

    如果原图没有奇环显然每条边都可以砍 下面讨论有奇环的情况 显然每个奇环都要砍到,所以砍的边一定在这些奇环的交中 然后有个结论,在交中砍边 1:砍的边一定不能在偶环上 2:只要不在偶环上,就是一个合法的 ...

  5. CF19E Fairy (奇偶环,树上差分)

    CF19E Fairy 做法 统计出每条边所在的奇偶环数量 如果没有奇环 哪条边都可以 如果只有一条 删去即可 其余情况 需要删除公共边 #include <bits/stdc++.h> ...

  6. BZOJ.3990.[SDOI2015]排序(DFS)

    题目链接 操作序列的顺序显然是无关的,所以只需按特定顺序求出一个长度为\(l\)的操作序列,它对答案的贡献为\(l!\). 我们从小到大枚举所有选择.若当前为第\(i\)个,如果有一段长度为\(2^i ...

  7. BZOJ4424 Cf19E Fairy(codeforces 19E/洛谷CF19E)

    树上差分 DFS BZOJ题目传送门 codeforces题目传送门 洛谷题目传送门 首先只有当图中没有奇环时一张图才能够二分图染色.因为只允许删一条边,那么答案就是所有奇环的交,并且奇环不能和偶环有 ...

  8. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  9. BZOJ 1024: [SCOI2009]生日快乐 dfs

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1024 题意: 题解: http://www.cnblogs.com/ljh2000-ju ...

最新文章

  1. .ne中的控制器循环出来的数据如何显示在视图上_Web程序设计-ASP.NET MVC4数据库操作实例...
  2. vue xss 存在_默认情况下,Vue是否为XSS提供安全性或防御XSS?
  3. 网站单页面排名提升的技巧有哪些?
  4. poj 2482 Stars in Your Window (线段树扫描线)
  5. 一看就懂的感知机算法PLA
  6. a标签禁止点击_Nofollow标签的使用
  7. 不同路径 II-dp
  8. cas java单点登录_java单点登录系统CAS的简单使用
  9. 服务器cpu哪个型号超频,服务器CPU也超频,AMD霄龙性能暴涨1.5倍-控制器/处理器-与非网...
  10. ProjectWise 工程内容管理及协同工作解决方案系列网络讲座
  11. 放鞭炮时,应该戴护目镜
  12. 记事本编写java_编写运行最简单的java程序——使用记事本编写java程序
  13. laravel 图片流_基于laravel,一个下载远程图片到本地, 返回 MD5的方法
  14. AUTOSAR实战教程pdf版
  15. mysql 分页 count 查询效率低下分析
  16. ER图(实体-联系图)
  17. Dwr概述与入门讲解
  18. 僧多肉少的阿里实习,我面了5次才拿到offer!
  19. C++实现的Buffer类
  20. C#: 解决Fody is only supported on MSBuild 16 and above

热门文章

  1. MAXIMO语言切换,以及设置多语言
  2. 编译内核 make modules_install报错make[1]: *** [arch/x86/crypto/aegis128-aesni.ko] Error 1 Makefile:1281: r
  3. java水面倒影效果,Java实现图片倒影代码详解
  4. 计算机储存容量5mb,笔记本电脑的硬盘上 8455MB(CYL 16383,H16,S63) 640GB (LBA 1,250,263,728Sectors) 分别表示什么意思?...
  5. 百度网盘PC端登录安全验证显示空白页
  6. 上海万国驾校 科目三考试
  7. html 锚文本,什么是锚文本,锚文本链接对SEO的影响!
  8. 苹果手机停用连接itunes_苹果手机密码输入次数过多停用怎么办?
  9. GPS坐标对应地图坐标偏移问题
  10. Android开发之使用贝塞尔曲线实现黏性水珠下拉效果