hdu-1878(欧拉回路)
来源:互联网 发布:慢跑 摇摆 知乎 编辑:程序博客网 时间:2024/05/29 02:10
欧拉回路练习题,顺便整理一下判断欧拉回路(欧拉图)和欧拉通路(半欧拉图)的条件。
1. 欧拉回路(欧拉图)
无向图存在欧拉回路的充要条件:一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。
有向图存在欧拉回路的充要条件:一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。
2. 欧拉通路(半欧拉图):
无向图存在欧拉通路的充要条件:一个无向图存在欧拉通路,当且仅当只有两个节点的度数为奇数(即开始点和结束点)。
有向图存在欧拉通路的充要条件:一个有向图存在欧拉通路,除两个节点(开始点和结束点)外,其它节点的入度等于出度,开始点的出度比入度大1,结束点的入度比出度大1。
回到这道题
题目大意:题目意思很明白,就不多说了。附链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878。
大体思路:创建一个记录各个节点度数的数组 a[1005],用并查集判断是否是连通图。
以下是ac代码:
#include<iostream>#include<cstring>#include<stdio.h>using namespace std;int a[1005];int fa[1005];int getfa(int x){ if(fa[x]==x) return x; else return fa[x]=getfa(fa[x]);}int main(){ int n,m; while(cin>>n){ if(!n) break; cin>>m; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) fa[i]=i; int x,y; for(int i=0;i<m;i++){ cin>>x>>y; a[x]++; a[y]++; x=getfa(x); y=getfa(y); fa[x]=y; } int i; for(i=1;i<=n;i++) if(a[i]%2||getfa(i)!=fa[1]) break; if(i<n) cout<<0<<endl; else cout<<1<<endl; } return 0;}
1 0
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878 欧拉回路
- HDU 1878 欧拉回路
- Google Assistant 将借力 CES 登陆 Android TV
- thinkphp 模板替换
- 关于斐波那契公约数
- 优化版冒泡排序之java实现
- laravel composer自动加载函数
- hdu-1878(欧拉回路)
- BZOJ 4760 dp
- 建树以及遍历
- 那些年不错的Android开源项目-个性化控件篇
- 四层负载均衡和七层负载均衡的区别
- iOS 图片旋转方法
- powerdesigner16.5 如何给生成的mysql脚本数据库中增加注释
- 10. kafka SimpleConsumer Consumer
- 弄清楚为什么字符串数组可以一起打印出来而整型数组还得用for循环