CF19E Fairy

做法

统计出每条边所在的奇偶环数量
如果没有奇环 哪条边都可以 如果只有一条 删去即可
其余情况 需要删除公共边

#include <bits/stdc++.h>
using namespace  std;
//#define  int long long
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define fi first
#define se second
#define pb  push_back
#define inf 1e18
#define endl '\n'
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define de_bug(x) cerr << #x << "=" << x << endl
#define all(a) a.begin(),a.end()
#define IOS   std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define  fer(i,a,b)  for(int i=a;i<=b;i++)
#define  der(i,a,b)  for(int i=a;i>=b;i--)
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
int n, k;
int m;
int d[N], pre[N], fa[N] , odd[N], even[N], vis[N], oc, ok[N];
vector<pii> g[N];
int ff = 1;
void dfs(int u, int f, int idx) {d[u] = d[f] + 1;
//  fa[u]=f;pre[u] = idx;for( pii t : g[u]) {int  v = t.fi;int  id = t.se;if(!d[v]) dfs(v, u, id);else if(v != f && d[v] < d[u]) {if((d[u]^d[v] ^ 1) & 1) {++oc;odd[u]++;odd[v]--;ff = id;} else {even[u]++;even[v]--;}}}
}
void dfs2(int u) {vis[u] = 1;for(auto t : g[u]) {int v = t.fi;int id = t.se;if(!vis[v]) {dfs2(v);odd[u] += odd[v];even[u] += even[v];}}if(odd[u] == oc && !even[u]) ok[pre[u]] = 1;
}void solve() {cin >> n >> m;fer(i, 1, m) {int a, b;cin >> a >> b;g[a].push_back({b, i});g[b].push_back({a, i});}fer(i, 1, n)if(!d[i])dfs(i, 0, 0);if(!oc) {cout << m << endl;fer(i, 1, m)cout << i << " ";return ;}if(oc == 1) ok[ff] = 1;fer(i, 1, n) {if(!vis[i])dfs2(i);}int cnt = 0;fer(i, 1, m) cnt += ok[i];cout << cnt << endl;fer(i, 1, m)if(ok[i])cout << i << " ";}
int main() {IOS;int _ = 1;//cin>>_;while( _-- )solve();
}

CF19E Fairy (奇偶环,树上差分)相关推荐

  1. 【10.20校内测试】【小模拟】【无向图建树判奇偶环】【树上差分】

    Solution 和后面两道题难度差距太大了吧!! 显然就只是个小模拟,注意判0就行了. Code #include<bits/stdc++.h> using namespace std; ...

  2. 解题报告:AcWing 352. 闇の連鎖(树上差分、方案统计)

    https://www.acwing.com/problem/content/354/ 在没有附加边的情况下,我们发现这是一颗树,那么再添加条附加边(x,y)后,会造成(x,y)之间产生一个环 如果我 ...

  3. 模板 - LCA最近公共祖先(倍增法、Tarjan、树上差分、LCA优化的次小生成树)

    整理的算法模板合集: ACM模板 注意x和y的LCA可以是x或者y本身 一.LCA的在线倍增算法 /*给定一棵包含 n个节点的有根无向树,有 m个询问,每个询问 给出了一对节点的编号 x和 y,询问 ...

  4. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  5. 中石油训练赛 - One-Way Conveyors(边双缩点+树上差分)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边的无向图,现在需要将这张图转换为有向图,并且使得 k 个可达条件成立,输出一种构造方案 题目分析:如果在无向图中出现环的话,那么在转换为有向图 ...

  6. [ZJOI2014] 星系调查(树上差分 + 数学推式子)

    problem luogu-P3340 题面写得那么长,其实说白了就是求一条直线,使得若干个点到这条直线的距离平方的和最小,求这个最小值. solution 我超爱数学,数学就是我的命,我一天不学数学 ...

  7. [XSY] 绿色(圆方树、树形DP、树上差分)

    绿色 题意简述 题解 首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改. 接下来分析仙人掌上的简单路径性质.一条简 ...

  8. [bzoj 4424]Cf19E Fairy

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

  9. 【BZOJ4424】Cf19E Fairy DFS树

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

最新文章

  1. R语言临床预测模型的评价指标与验证指标实战:自定义的净重新分类指数NRI(Net Reclassification Index, NRI)函数
  2. vs编译器 printf 控制台输出_【必备】推荐几款好用的C/C++ 在线编译器?
  3. 证明矩阵添加一列(行),则其秩或不变,或增加1
  4. 对信号与系统课程的意见与建议
  5. Linux系统编程——孤儿进程模拟及分析
  6. ps分辨率像素英寸和厘米的区别_关于像素,你想知道的都在这里
  7. Windows 8.1 Preview 开发资源汇总
  8. Spark on Yarn查看删除日志
  9. python代码翻译器-Python一键转Java?quot;谷歌翻译”你别闹(附链接)
  10. Matplotlib Toolkits:python高级绘图库seaborn
  11. Effective C# 原则42:使用特性进行简单的反射(译)
  12. PCIE协议(原版) 免费分享
  13. Ubuntu17.04系统安装必备软件与存在的问题
  14. 苹果原壁纸高清_手机壁纸巨型神兽系列全面屏壁纸图片
  15. 《宝塔面板教程5》:如何上传网站程序安装自己的网站
  16. 转贴汪应果先生的“全球华人应该向大陆中国人学什么?”
  17. 思岚发布新品TOF激光雷达——RPLIDAR S1 性能更强、更稳定
  18. DirectX游戏开发之3D角色动起(下)
  19. 批量备案域名查询工具-批量备案域名扫描查询
  20. STM32 蓝牙平衡小车(一)硬件原理图

热门文章

  1. 「随笔」我的导师离职了...
  2. 啥水平?谷歌程序员:我用东北方言编程
  3. 谷歌浏览器(chrome)在线翻译 解决方式
  4. 实时数据库和关系数据库的区别、对比
  5. ORAN C平面 Section Extension 7
  6. 拼多多店铺的先用后付|盛天海科技
  7. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)...
  8. IPad分屏,当电脑第二显示屏
  9. 使用torchvision.models
  10. vivo手机的坑-禁止微信浏览器网页点击图片,图片会自动放大