HDU5883 欧拉路径与欧拉回路的判定
来源:互联网 发布:java分布式系统架构图 编辑:程序博客网 时间:2024/05/18 09:18
1
相关知识:
1)定义
欧拉路径/欧拉通路,通过图中所有边且每边仅通过一次的通路。具有欧拉通路而没有欧拉回路的图称为半欧拉图。
欧拉回路,构成回路的欧拉通路。具有欧拉回路的图称为欧拉图。
2)定理
无向连通图中,所有顶点的度数均为偶数则构成欧拉回路,所有顶点中有且仅有两个顶点的度数为奇数而其他点的度数为偶数那么构成欧拉通路。
有向连通图中,每个顶点的入度等于出度构成欧拉回路,所有顶点中有且仅有两个顶点的度数满足各自的入度与出度相差为1(一个入度比出度大1、另一个出度比入度大1)而其他点的入度都等于出度那么构成欧拉通路。
2其他:题目数据应该是给的连通图,如果是个非连通图,用并查集或者DFS处理得知非连通图后,输出Impossible
3
#include <iostream>#include <algorithm>#include <string.h>using namespace std;const int MAXN=100010;int du[MAXN];int a[MAXN];int main(){ int t; cin>>t; int n,m; while(t--){ cin>>n>>m; memset(du,0,sizeof(du)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } int u,v; for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); du[u]++;du[v]++; } int ans=0; for(int i=1;i<=n;i++){ if(du[i]&1) ans++; } if(ans!=2&&ans!=0){//非 cout<<"Impossible"<<endl; continue; } if(ans==0){//欧拉回路,每个顶点的度数都为偶数。遍历每一个点,然后枚举每一个点当做起点的情况(多遍历一次该点) for(int i=1;i<=n;i++){ int number=du[i]>>1; if(number&1) ans^=a[i]; } int MAX=ans^a[1];//因为^所以无需longlong for(int i=2;i<=n;i++){ MAX=max(MAX,ans^a[i]); } cout<<MAX<<endl; } else{//欧拉路径,只有两个点的度数为奇数,其他点的度数都为偶数。遍历每一个点即可 ans=0; for(int i=1;i<=n;i++){ int number; if(du[i]&1){ number=(du[i]+1)>>1; } else number=du[i]>>1; if(number&1){ ans^=a[i]; } } cout<<ans<<endl; } }}
0 0
- HDU5883 欧拉路径与欧拉回路的判定
- 欧拉回路的判定
- hdu5883 The Best Path(欧拉通路、欧拉回路)
- HDU1878欧拉回路(欧拉回路的判定)
- 欧拉路径与欧拉回路
- hdu5883【欧拉通路】
- HDU1878-欧拉回路的判定
- hud 1878 欧拉回路的判定
- HDU5883 The Best Path(欧拉回路)
- 欧拉回路 欧拉通路的判定
- 欧拉通路 欧拉回路的区别 及其判定
- 欧拉路径/回路
- 欧拉回路--输出欧拉回路的路径
- 欧拉通路 欧拉回路的判定 Hdu 1878 欧拉回路
- HDU 1878 欧拉回路(简单欧拉回路判定)
- HDOJ 欧拉回路 1878【欧拉回路判定】
- 浅谈欧拉回路与欧拉路径
- 欧拉回路以及欧拉路径
- 使用python+sklearn的决策树方法预测是否有信用风险
- 回车自动提交与禁止回车自动提交
- [Leetcode] Count Numbers with Unique Digit
- Linux基本命令
- Android Studio使用jar包
- HDU5883 欧拉路径与欧拉回路的判定
- DBMS_SCHEDULER包管理计划任务
- Android 实现点击两次BACK键退出应用
- 归并排序
- Android 事件输入系统整体框架
- 注解+动态代理实现bookstore的权限控制
- memcache
- HDU 5887 Herbs Gathering(搜索+剪枝)
- CDH5 新手详细安装教程