HDU 5883 欧拉回路
来源:互联网 发布:罗盘视频软件 编辑:程序博客网 时间:2024/06/11 23:52
题面:
思路:
这里面有坑啊啊啊…..
先普及一下姿势:
判断无向图欧拉路的方法:
图连通,只有两个顶点是奇数度,其余都是偶数度的。判断无向图欧拉回路的方法:
图连通,所有顶点都是偶数度。
重点:图连通!!
思路:
先看看图是否联通(就是所有边都能经过么)
再判判是不是欧拉路
经过的次数=(du[i]+1)/2
如果是欧拉回路:枚举起点 再异或一下
不是:输出当前解
就酱~
//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 1000050int n,t,m,xx[N],yy[N],h[N],ans,du[N],flg;int first[N],nxt[N],v[N],tot;bool vis[N],V[N];void add(int x,int y){v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}void dfs(int x){ for(int i=first[x];~i;i=nxt[i])if(!V[i]) vis[v[i]]=1,V[i]=V[i^1]=1,dfs(v[i]);}int main(){ scanf("%d",&t); while(t--){ memset(first,-1,sizeof(first)),memset(vis,0,sizeof(vis)); memset(V,0,sizeof(V)); memset(du,0,sizeof(du)),flg=ans=tot=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&h[i]); for(int i=1;i<=m;i++){ scanf("%d%d",&xx[i],&yy[i]); du[xx[i]]++,du[yy[i]]++; add(xx[i],yy[i]),add(yy[i],xx[i]); } dfs(xx[1]),vis[xx[1]]=1; for(int i=0;i<tot;i++)if(!V[i])goto ed; for(int i=1;i<=n;i++){ if(!vis[i])continue; if(du[i]&1)flg++; du[i]=(du[i]+1)/2; if(du[i]&1)ans=ans^h[i]; } if(flg==2)printf("%d\n",ans); else if(!flg){ int answer=0; for(int i=1;i<=n;i++)if(vis[i]) answer=max(answer,ans^h[i]); printf("%d\n",answer); } else ed:puts("Impossible"); }}
0 0
- HDU 5883 欧拉回路
- HDU 欧拉回路
- 欧拉回路 HDU
- HDU 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1116 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- 21个常用的PHP函数代码段
- 10.6
- Repair the Wall
- map
- 第一个web项目hello world的实现
- HDU 5883 欧拉回路
- 自定义View(二)
- PHP与JAVA的签名与验签比较
- C++数据类型
- 优雅编程之这样使用类和接口,你就“正常”了(三十)
- NOI2016 优秀的拆分 后缀数组
- 关于Java如何连接Mysql数据库
- 四旋翼飞行器——应用背景
- Android开发之shape