BZOJ 4238 电压

考虑一条边成为答案以后,删去Ta后剩下的图是一个或很多个二分图,即没有奇环

则一条边可以成为答案,当且仅当自己在所有奇环的交上且不在偶环上。

考虑建出dfs树,那么返祖边一定在环上。

把边下放到点上,考虑处理出返祖边覆盖的两个端点直接的路径,这些点都在这个环上,按照这个环的奇偶打一个差分上去即可。

但是这样只考虑了只有一个返祖边在环上的情况,返祖边在两个环以上的环我们没有处理

考虑分类讨论

  • 若两个有交返祖边奇偶不同,少处理的一个环是奇环,无论是大奇环还是小奇环都没有影响
  • 若均为奇环,那么奇环的交不在大偶环上,也没有影响
  • 若均为偶环,显然都不会成为答案

但是我们还需要考虑非树边

如果仅有一个奇环,那么奇环上的边都是答案

否则两个有交的非树边奇环一定构成了一个大偶环,使非树边不成为答案。


Code:

#include <cstdio>
#include <cctype>
#include <map>
#include <algorithm>
#define ll long long
using std::max;
using std::min;
const int SIZE=1<<21;
char ibuf[SIZE],*iS,*iT;
//#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),iS==iT?EOF:*iS++):*iS++)
#define gc() getchar()
template <class T>
void read(T &x)
{x=0;char c=gc();while(!isdigit(c)) c=gc();while(isdigit(c)) x=x*10+c-'0',c=gc();
}
const int N=2e5+10;
int head[N],to[N<<2],Next[N<<2],cnt=1;
void add(int u,int v)
{to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int n,m,dep[N],jh[N],oh[N],vis[N<<2],jhc,ohc,ans;
void dfs(int now)
{for(int v,i=head[now];i;i=Next[i]){if(vis[i^1]) continue;v=to[i];vis[i]=1;if(!dep[v]){dep[v]=dep[now]+1;dfs(v);jh[now]+=jh[v];oh[now]+=oh[v];}else if((dep[now]-dep[v])&1)++ohc,++oh[now],--oh[v];else++jhc,++jh[now],--jh[v];}
}
int main()
{read(n),read(m);for(int u,v,i=1;i<=m;i++){read(u),read(v);add(u,v),add(v,u);}for(int i=1;i<=n;i++)if(!dep[i])dep[i]=1,dfs(i);for(int i=1;i<=n;i++){if(dep[i]==1) continue;if(!jhc) ans+=oh[i]==0;else if(jhc==1) ans+=jh[i]&&(oh[i]==0);else ans+=(jh[i]==jhc)&&(oh[i]==0);}printf("%d\n",ans+(jhc==1));return 0;
}

2019.6.26

转载于:https://www.cnblogs.com/butterflydew/p/11090715.html

BZOJ 4238 电压 解题报告相关推荐

  1. BZOJ 2959: 长跑 解题报告

    2959: 长跑 Description 某校开展了同学们喜闻乐见的阳光长跑活动.为了能"为祖国健康工作五十年",同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑 ...

  2. BZOJ 3159: 决战 解题报告

    BZOJ 3159: 决战 1 sec 512MB 题意: 给你一颗\(n\)个点,初始点权为\(0\)的有跟树,要求支持 Increase x y w 将路径\(x\)到\(y\)所有点点权加上\( ...

  3. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  5. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. 漫画:什么是 JVM 的垃圾回收?
  2. socket什么意思_浅析Redis为什么这么快
  3. 【C++】欧几里德算法快速求最大公约数
  4. Python 中函数的 收集参数 机制
  5. java convexhull_图像上划凸多边形(convexHull()函数)
  6. 【MySQL】UPDATE LEFT JOIN
  7. 如何从机器学习数据中获取更多收益 1
  8. Linux中关于 su 和 su - 的区别
  9. P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】
  10. c语言中 字符串常量的界定符,c语言题库2
  11. Java内置锁——synchronized
  12. c# 日期函数[string.Format----GetDateTimeFormats] --转载
  13. 线性表:2.线性表的顺序存储结构--顺序表及C语言实现
  14. Flink :刷屏 forceKillApplication over null,Retrying immediately The Client is Stopped
  15. g++ vscode 环境选择_VSCode C++环境配置(个人使用)
  16. idea将项目打包(jar包/war包)
  17. idea 查看jsp是否被引用_idea 查看jsp是否被引用_IntelliJ IDEA解析JSP中的Web路径
  18. 电脑如何通过USB连接PPC手机上网
  19. 【Linux 中国】Ubuntu vs Arch:孰优孰劣?
  20. 数字的算法--大数加法

热门文章

  1. dz手机版空白显示index.php,关于Discuz x3.3页面空白解决方法
  2. php文件统计源码,php统计文件中的代码行数
  3. java 析构方法_java析构方法详解
  4. 简单的js网页计算机代码,简易js代码实现计算器操作
  5. Android2017 这些技术 —— 你都了解过吗
  6. 【LeetCode】Copy List with Random Pointer
  7. Hibernate5-1对多(1:n)-级联删除-cascade=delete-orphanl
  8. 决策树ID3算法[分类算法]
  9. Ubuntu 下安装 输入法
  10. typedef用法(1)