DescriptionDescription

你有一个nn个点mm条边的无向图。
对于每条边,判断删除之后是否为二分图。
n,m≤104n,m\le10^4

SolutionSolution

一个图是二分图当且仅当没有奇环。
对dfsdfs树黑白染色,如果一条返祖边两端的颜色一样就说明是奇环。
发现如果有一个偶环也覆盖了这条边,那么删除这条边之后这个偶环和原来的奇环会形成一个奇环。
显然一条边合法必须所有奇环都经过这条边。
所以对偶环打上−1-1标记,奇环打上+1+1标记,如果一条边的标记和是奇环个数那么就合法。
所以实际上是O(n+m)O(n+m)的。。。。

#include <bits/stdc++.h>
using namespace std;const int N = 10101;inline char get(void) {static char buf[100000], *S = buf, *T = buf;if (S == T) {T = (S = buf) + fread(buf, 1, 100000, stdin);if (S == T) return EOF;}return *S++;
}
template<typename T>
inline void read(T &x) {static char c; x = 0; int sgn = 0;for (c = get(); c < '0' || c > '9'; c = get()) if (c == '-') sgn = 1;for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';if (sgn) x = -x;
}struct edge {int to, next;edge(int t = 0, int n = 0): to(t), next(n) {}
};
edge G[N << 1];
int head[N], dep[N], tag[N], pre[N], tag1[N], vis[N];
int n, m, Gcnt, x, y, ont, dfc;
vector<int> ans;inline void AddEdge(int from, int to) {G[++Gcnt] = edge(to, head[from]); head[from] = Gcnt;G[++Gcnt] = edge(from, head[to]); head[to] = Gcnt;
}
inline void dfs1(int u, int f, int d) {dep[u] = d; pre[u] = ++dfc; int to;for (int i = head[u]; i; i = G[i].next) {to = G[i].to; if (to == f) continue;if (pre[to] && pre[to] < pre[u]) {if (dep[u] ^ dep[to]) { // even circles--tag[u]; ++tag[to]; --tag1[i >> 1];} else {++tag[u]; --tag[to]; ++tag1[i >> 1]; ++ont;}} else if (!pre[to]) dfs1(to, u, d ^ 1);}
}
inline int dfs2(int u, int f) {int to, t1, t = tag[u]; vis[u] = 1;for (int i = head[u]; i; i = G[i].next) {to = G[i].to; if (to == f) continue;if (pre[to] < pre[u]) {if (tag1[i >> 1] == ont) ans.push_back(i >> 1);} else if (!vis[to]) {t1 = dfs2(to, u); t += t1;if (t1 == ont) ans.push_back(i >> 1);}}return t;
}int main(void) {freopen("1.in", "r", stdin);freopen("1.out", "w", stdout);read(n); read(m); Gcnt = 1;for (int i = 1; i <= m; i++) {read(x); read(y);AddEdge(x, y);}for (int i = 1; i <= n; i++)if (!pre[i]) dfs1(i, 0, 1);for (int i = 1; i <= n; i++)if (!vis[i]) dfs2(i, 0);sort(ans.begin(), ans.end());if (!ont) {ans.clear();for (int i = 1; i <= m; i++) ans.push_back(i);}printf("%d\n", ans.size());for (int x: ans) printf("%d ", x);return 0;
}

[二分图]Codeforces 19E. Fairy相关推荐

  1. CodeForces - 19E Fairy【二分图】【DFS】

    题目链接:https://codeforces.com/contest/19/problem/E #include <iostream> #include <cstring> ...

  2. Codeforces 19E Fairy

    Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成 一个二分图. [题目分析] 手玩一下,发现删除的是奇环的交集,而且不在偶环上的点,然后乱搞就可 ...

  3. codeforces 19E Fairy 树链剖分

    题意: 给定一张无向图,求有多少条边保证删掉它之后能将该图转化成二分图. 解析: 首先二分图没有奇环. 我们可以dfs出一棵树. 这时候,非树边都是返祖边. 每一条非树边和树边都可以构成一个环. 我们 ...

  4. Codeforces 19E DFS 树

    题意 传送门 Codeforces 19E Fairy 题解 若图中不存在非二分图的连通分量,则任意一边删除后仍是二分图:若图中存在大于一个非二分图的连通分量,则不可能通过删除一条边使之变为二分图.故 ...

  5. CodeForces 19E 仙女fairy

    CF19E 话说标题"仙女",好骚啊.... 这道题的题面核心是图论二分图.满足删除一条边,可以形成一张二分图.求可以删除的边数,并输出是那些边. 出题人非常良心的给出了前六十分的 ...

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

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

  7. CodeForces - 1354E Graph Coloring(dfs判断二分图+dp)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,要求给 n 个点赋值为 1 . 2 或 3 ,需要满足以下条件: 每个点都需要被赋值 权值为 1 的点共 n1 个 权值为 ...

  8. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  9. Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维

    传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai​,目标值bib_ibi​,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja ...

最新文章

  1. [C# Control] 仿RAR式进度条 (RarProgressBar)
  2. 软件研发之道——知识产权
  3. BGP小实验(二)——还是他,继续第二波走起来
  4. git推送指令配置_git 常用命令
  5. VB实现6大排序算法---动态过程展示(建议收藏)
  6. 湖南工程学院计算机网络考试,湖南工程学院 计算机网络期末试卷试题
  7. python导出excel文件数字签名_Python使用RSA+MD5实现数字签名
  8. adb-常用命令记录
  9. 简单排序(插入排序法)
  10. Python + Selenium WebDriver Api 知识回顾
  11. Hadoop之Hbase安装和配置
  12. 《Linux程序设计》第4版 核心笔记
  13. 编写一个简单的JavaScript模板引擎
  14. 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!
  15. 软件测试--如何把5M图片变成10M图片
  16. 智能运维 VS 传统运维|AIOps服务管理解决方案全面梳理
  17. 串口屏应用案例_大彩串口屏在高拍仪上的应用方案
  18. ATFX:美国9月PCE物价指数晚间发布,会出现意外吗?
  19. 特征选择/筛选方法总结
  20. shopify开发经验

热门文章

  1. 明光桥南 || 明光桥北
  2. C# 开发的网络数据包抓取的的实现
  3. Hololens学习(一)安装 部署Hololens开发环境
  4. 在我的计算机看不到移动硬盘,移动硬盘在我的电脑中显示容量但不能显示内容 – 手机爱问...
  5. C#与宇电温控表自定义协议通信实例
  6. android 4.4 surfaceflinger 渲染,Android4.4.3--surfaceflinger导致系统起不来,ldb显示问题...
  7. keras.models导入Sequential错误
  8. 2023你冲不冲,冲冲冲冲~~
  9. latex footnote numbering
  10. 大专毕业C/C++零基础学编程难吗?多久能就业?