如果一条边可行,那么删掉这条边后,剩下的图是二分图且该边的两端点颜色相同。

那么可行的边必然属于所有奇环的交集,且不属于任何偶环。

随便取一棵生成树,对于一条非树边,它形成了环:

若是偶环,则将环上的边都标记为不能选。

若是奇环,则将环上的边经过的奇环数都加一。

可以用树链剖分维护前缀和做到$O(m\log n)$。

对于其它的环,都可以由以下三种情况得到:

1.一个奇环异或一个偶环得到一个新的奇环,公共部分一定经过了偶环,即使不标记也会被舍去。

2.一个奇环异或一个奇环得到一个新的偶环,新环上的边一定不属于所有奇环的交,即使不标记也会被舍去。

3.一个偶环异或一个偶环得到一个新的偶环,公共部分一定经过了偶环且被标记过了,所以无需再次标记。

因此只需要考虑所有两两之间异或可以表示出所有环的基环即可。

#include<cstdio>
#define N 300010
int n,m,i,x,y,f[N],g[N],nxt[N<<1],v[N<<1],ed,son[N],size[N],d[N],dis[N],top[N],loc[N],dfn,s[2][N];
int e[N][2],need[N],ban[N],cnt,ans;
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;v[++ed]=x;nxt[ed]=g[y];g[y]=ed;
}
void dfs(int x,int y){size[x]=1,d[x]=d[f[x]=y]+1,dis[x]=dis[y]+(x<=n);for(int i=g[x];i;i=nxt[i])if(v[i]!=y){dfs(v[i],x);size[x]+=size[v[i]];if(size[v[i]]>size[son[x]])son[x]=v[i];}
}
void dfs2(int x,int y){top[x]=y;loc[x]=++dfn;if(son[x])dfs2(son[x],y);for(int i=g[x];i;i=nxt[i])if(v[i]!=son[x]&&v[i]!=f[x])dfs2(v[i],v[i]);
}
inline void modify(int x,int y,int p){for(;top[x]!=top[y];x=f[top[x]]){if(d[top[x]]<d[top[y]]){int z=x;x=y;y=z;}s[p][loc[top[x]]]++,s[p][loc[x]+1]--;}if(d[x]<d[y]){int z=x;x=y;y=z;}s[p][loc[y]]++,s[p][loc[x]+1]--;
}
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
int main(){read(n),read(m);for(i=1;i<=n;i++)f[i]=i;for(i=1;i<=m;i++){read(x),read(y),e[i][0]=x,e[i][1]=y;if(F(x)!=F(y))f[f[x]]=f[y],add(x,i+n),add(y,i+n);else need[i]=1;}for(i=1;i<=n;i++)if(!d[i])dfs(i,0),dfs2(i,i);for(i=1;i<=m;i++)if(need[i]){x=e[i][0],y=e[i][1];if((dis[x]&1)^(dis[y]&1))ban[i]=1,modify(x,y,0);else modify(x,y,1),cnt++;}for(i=2;i<=dfn;i++)s[0][i]+=s[0][i-1],s[1][i]+=s[1][i-1];for(i=1;i<=m;i++)if(need[i]){if(!ban[i]&&cnt==1)ans++;}else{if(!s[0][loc[i+n]]&&s[1][loc[i+n]]==cnt)ans++;}return printf("%d",ans),0;
}

  

转载于:https://www.cnblogs.com/clrs97/p/4737869.html

BZOJ4238 : 电压相关推荐

  1. 如何设计四象限电压转换电路?

    四象限电源是:可以吸收和提供正负电流和电压的电源. 虽然简单电压转换器可以从输入电压生成固定的输出电压,但在某些应用中,这种特性是不够的. 举个例子:控制与电容相连的电压节点,这些电容可以充电至任何电 ...

  2. 树莓派电压过低 串口数据错误增多

    调试过程中,树莓派串口读单片机上传的数据 的程序突然一堆checksum error. 换一块满电的LiPo电池就大幅减少了报错. 一开始猜测原因 可能是电压过低导致CPU运行慢了(可能叫做" ...

  3. 单片机ad转换测电压c语言,大家帮我看下这个STC AD转换 测电压程序错在哪里,谢谢了...

    大家帮我看下这个STC AD转换 测电压程序错在哪里,谢谢了 [复制链接] #include"ADC电压表.H" #include uchar value; void adc_in ...

  4. 隔空测量电压:电场强度测试仪-FMX-004

    简 介: 利用绝缘表所产生的直流高压在单面覆铜板附近产生电场,测试电场强度测试仪FMX-004的读数,看是否与已知电压所产生的电场强度相同.通过实验验证了FMX-004的性能,讨论了影响FMX-004 ...

  5. 基于场效应管2N3819制作非接触电压检测 - 购买到假货了

    简 介:   的确在淘宝 上有各种销售渠道,开始的寻找价格便宜的 2N3819,结果看来是购买到的假货了. 关键词: 2N3819,假货,淘宝 #mermaid-svg-NPVrCg66QuoJgH8 ...

  6. 记录低频的混沌电压波形-双晶体管混沌信号

    简 介: 通过更换电路中的电容参数,进一步降低了混沌信号的中心频率,使用声卡进行记录的时候可以提高记录数据的完整性. 关键词: 混沌信号,晶体管,声卡,计算机记录 #mermaid-svg-zuRyQ ...

  7. 用于检测AC电压的无接触电压检测器

    简 介: 给出了网络上一些基本的非接触交流电压检测电路.在第二部分进行分析了基于电容耦合下的原理分析.这对于一些网络上基于电磁感应方面的解释更接近于实际情况. 关键词: 电压检测,AC,非接触 #me ...

  8. TPS54360 输入60V,输出3.5A降压开关电压

    ▌01 TPS54360 TPS54360 输入电压可以高达60V(max 65V).这比起 LM2527 最大输入电压40V要高.使用这款开关电压降压芯片用在48V的应用电路中. 注意: LM272 ...

  9. N-MOS的G-S电容随着DS电压的变化关系

    ➤ 01 栅极-源极输入电容与DS电压 对于 MOS管 往往存在较大的输入电容.这个电容随着DS的变化关系使得它可以当做一个可变电容来使用. 下面是IRF3710的数据手册的输入电容与DS电压之间的关 ...

最新文章

  1. PHP Socket配置以及实例
  2. 直观、形象、动态,一文了解无处不在的标准差
  3. MSTAR SETBOX 常用API
  4. mongodb 关闭服务 mongod -f /root/mongodb/bin/xx.conf --shutdown
  5. 选修课计算机网络技术,2020智慧职教网络选修课计算机网络技术基础答案完整满分章节测试答案...
  6. mysql基础_月隐学python第22课
  7. 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...
  8. python求矩阵的秩_Python 实现线性代数计算器
  9. 年底清理垃圾了,整理了一整套python学习资料无偿送给大家
  10. 从程序员到项目经理(九):程序员加油站 -- 再牛也要合群
  11. MVC神韵---你想在哪解脱!(七)
  12. linux内核调试器ftrace使用
  13. mysql存储过程应用_mysql 存储过程的应用
  14. java学习笔记---3
  15. sfc流程图怎么画_如何使用gxworks2创建简单的顺序功能图sfc
  16. 转换小写金额为大写金额
  17. RTOS那些你得知道的事儿(一)
  18. 像模拟人生的 java游戏下载_我的世界1.7.2模拟人生整合包
  19. Spring数据绑定之DataBinder篇---01
  20. [EuroPython2021笔记] Python反面模式 -- 用空格的比用tab的收入高

热门文章

  1. 计算机视觉与深度学习,看这本书就够了
  2. 关于程序中的操作符左移和右移问题
  3. Qt读取ini配置文件
  4. linux基础试卷笔试,顽石系列:Linux基础笔试
  5. DBCP使用BasicdataSource连接(两种单例模式-----饿汉和懒汉模式)
  6. 009_IOC注解开发
  7. 001_JSON-lib下载和文档
  8. mysql frm和ibd怎么恢复数据库_mysql数据库通过frm和ibd恢复数据
  9. redhat linux创建磁盘分区,redhat6.4 挂载硬盘,创建新分区,删除分区
  10. Kotlin极简教程