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

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

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

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

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

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

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

#include<cstdio>
#define N 200010
int 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]<vis[x]){
h[i>>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<ansx)ansx=x,ansy=y;else if(x==ansx&&y<ansy)ansy=y;
}
bool solve(){
dfn=cnt=seed=0;
for(i=1;i<=n;i++)g[i]=d[i]=vis[i]=f[i]=tag[i]=0;
for(i=1;i<=m;i++)h[i]=0;
for(ed=i=1;i<=m;i++)read(x),read(y),add(x,y),add(y,x);
for(i=1;i<=n;i++)if(d[i])q[++cnt]=i;
if(cnt!=2&&cnt!=4)return 0;
dfs(1,0);
for(i=1;i<=n;i++)if(!vis[i])return 0;
for(dfn=0,i=1;i<=n;i++)vis[i]=0;
dfs2(1,0);
ansx=N;
if(cnt==4){
up(get(q[1],q[2]),get(q[3],q[4]));
up(get(q[1],q[3]),get(q[2],q[4]));
up(get(q[1],q[4]),get(q[2],q[3]));
}else for(i=1;i<=n;i++)if(!d[i])up(get(i,q[1]),get(i,q[2]));
if(ansx<N)return printf("YES\n%d %d\n",ansx,ansy),1;
return 0;
}
int main(){
while(~scanf("%d%d",&n,&m)){
printf("Case %d: ",++Case);
if(!solve())puts("NO");
}
return 0;
}

  

BZOJ3092 : [FDU2012校赛] A Famous King’s Trip的更多相关文章

  1. BZOJ 3093: [Fdu校赛2012] A Famous Game

    3093: [Fdu校赛2012] A Famous Game Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 242  Solved: 129[Subm ...

  2. HZNU第十二届校赛赛后补题

    愉快的校赛翻皮水! 题解 A 温暖的签到,注意用gets #include <map> #include <set> #include <ctime> #inclu ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. SCNU省选校赛第二场B题题解

    今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...

  5. 2014上半年acm总结(1)(入门+校赛)

    大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干=  = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...

  6. 2017CUIT校赛-线上赛

    2017Pwnhub杯-CUIT校赛 这是CUIT第十三届校赛啦,也是我参加的第一次校赛. 在被虐到崩溃的过程中也学到了一些东西. 这次比赛是从5.27早上十点打到5.28晚上十点,共36小时,中间睡 ...

  7. 校赛F

    问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...

  8. PKU2018校赛 H题 Safe Upper Bound

    http://poj.openjudge.cn/practice/C18H 题目 算平均数用到公式\[\bar{x}=\frac{x_1+x_2+x_3+\cdots+x_n}{n}\] 但如果用in ...

  9. 【魔改】hdu6325 多校赛3G xy排序凸包+llvector模板

    凸包算法前的预处理,可以极角排序,也可以按X,Y轴排序, 极角排序需要找到角落里的一个点,Xy轴排序要跑两遍凸包 而本题的要求只要一个上半凸包,并且有X轴从小到大以及字典序限制,完全符合xy排序,直接 ...

随机推荐

  1. 点击按钮对两个div的隐藏与显示进行切换

    HTML: <button type="button"  id="showHidden">点击切换div的隐藏与显示</button> ...

  2. JS打造的跟随鼠标移动的酷炫拓扑图案

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. hdu3038(带权并查集)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...

  4. Swift - 语言指南,来自github学习

    @SwiftLanguage 更新于 2016-6-6,更新内容详见 Issue 55.往期更新回顾详见<收录周报> 这份指南汇集了 Swift 语言主流学习资源,并以开发者的视角整理编排 ...

  5. Android Tab -- 使用ViewPager、PagerTitleStrip/PagerTabStrip来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...

  6. hdu 1251:统计难题(字典树,经典题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  7. 序列化悍将Protobuf-Net,入门动手实录

    最近在研究web api 2,看了一篇文章,讲解如何提升性能的, 在序列化速度的跑分中,Protobuf一骑绝尘,序列化速度快,性能强,体积小,所以打算了解下这个利器 1:安装篇 谷歌官方没有提供.n ...

  8. 第十二篇:SOUI的utilities模块为什么要用DLL编译?

    SOUI相对于DuiEngine一个重要的变化就是很多模块变成了一个单独的DLL. 然后很多情况下用户可能希望整个产品就是一个EXE,原来DuiEngine提供了LIB编译模式,此时链接LIB模式的D ...

  9. 用PowerShell脚本实现对SharePoint页面Title的修改

    存在这样一种情况,对应的page已经部署到product的SharePoint环境中,那么在部署下一个版本的时候就不允许把已经创建好的page删除再创建,因此page中修改过的属性就不能再次部署到Sh ...

  10. 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP

    1804: 有向无环图 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 187  Solved: 80[Submit][Status][Web Board ...