博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3092 : [FDU2012校赛] A Famous King’s Trip
阅读量:4970 次
发布时间:2019-06-12

本文共 1237 字,大约阅读时间需要 4 分钟。

题目等价于去掉两条边,使得剩下的图连通,且所有点度数都为偶数。

首先特判掉图一开始就不连通的情况。

求出dfs生成树,对于每条非树边随机一个权值,每条树边的权值为所有经过它的非树边权值的异或和。

那么剩下的图连通等价于两条边权值非$0$,且两条边的权值不等。

如果有$2$个奇点,那么两条边有公共点,枚举公共点判断即可。

否则只能是$4$个奇点,分类讨论判断所有连边方式即可。

时间复杂度$O(n+m)$。

 

#include
#define N 200010int Case,n,m,i,x,y,g[N],v[N<<1],nxt[N<<1],ed,d[N],vis[N],dfn,f[N],q[N],cnt,ansx,ansy;unsigned long long seed,h[N],tag[N];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';}inline void add(int x,int y){d[x]^=1;v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}void dfs(int x,int y){ vis[x]=++dfn; for(int i=g[x];i;i=nxt[i]){ int u=v[i]; if(u==y)continue; if(!vis[u])f[u]=i>>1,dfs(u,x); else if(vis[u]
>1]=seed=seed*233+17; tag[x]^=seed,tag[u]^=seed; } }}void dfs2(int x,int y){ vis[x]=++dfn; for(int i=g[x];i;i=nxt[i]){ int u=v[i]; if(u==y)continue; if(!vis[u])dfs2(u,x),tag[x]^=tag[u]; } if(x>1)h[f[x]]^=tag[x];}inline int get(int x,int y){ for(int i=g[x];i;i=nxt[i])if(v[i]==y)return i>>1; return 0;}inline void up(int x,int y){ if(!x||!y)return; if(!h[x]||!h[y]||h[x]==h[y])return; if(x>y){int z=x;x=y;y=z;} if(x

  

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

你可能感兴趣的文章
JS屏蔽Flash右键菜单
查看>>
第三次作业 四则运算
查看>>
阿里2015实习生招聘在线测试----编程题,设计有限任务响应队列
查看>>
C# 判断字符串为空的4种方法及效率
查看>>
oracle 秒
查看>>
(转)setTextColor()的参数设置方式
查看>>
【常见Web应用安全问题】---4、Directory traversal
查看>>
重装了服务器,用的是centos/php微信小程序版,centos 命令大全
查看>>
敏感文件整理
查看>>
博客申请成功后第一天
查看>>
ubuntu 电源管理
查看>>
Json-Server模拟数据接口开发
查看>>
EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
查看>>
第七周作业
查看>>
ubuntu 下 cocos2dx游戏引擎搭建 编译和使用(可以在linux桌面 安卓手机运行)
查看>>
POJ2287 Tian Ji -- The Horse Racing
查看>>
Web Services基础学习(W3C)
查看>>
android自定义seekBar
查看>>
慕课网之JavaScript-alert
查看>>
MySQL的BlackHole引擎在主从架构中的作用
查看>>