HDU 1879 欧拉回路
来源:互联网 发布:怎么把网络监控头屏蔽 编辑:程序博客网 时间:2024/05/21 09:57
题意:
判断一个图是否是欧拉回路。
补充:
欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路。
欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路。
无向图是否具有欧拉通路或回路的判定:
欧拉通路:图连通;图中只有0个或2个度为奇数的节点
欧拉回路:图连通;图中所有节点度均为偶数
有向图是否具有欧拉通路或回路的判定:
欧拉通路:图连通;除2个端点外其余节点入度=出度;1个端点入度比出度大1;一个端点入度比出度小1 或 所有节点入度等于出度
欧拉回路:图连通;所有节点入度等于出度
这道题的算法思路:利用并查集先判断图连通性,然后利用in数组记录各点的度。(因为该题是无向图)
判断条件:当一个点的根节点与其他点的根节点不等,则不连通,则返回0;当该点的度数是奇数时则非欧拉图,返回0;其他情况返回1
代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;//判断连通性,然后判断度相同 int IN[1001];//入度 int par[1001],n,m;int find(int x);void unite(int x, int y);int find(int x) { return par[x] == x ? x : par[x] = find(par[x]);}void unite(int x, int y) { x = find(x); y = find(y); if(x == y) return; par[x] = y; }int main(){ while(~scanf("%d",&n),n){ memset(IN,0,sizeof(IN)); for(int i=1;i<=n;i++){ par[i]=i;//多个等号啊!!!! } scanf("%d",&m); for(int i = 0; i < m; i++) { int a, b; scanf("%d%d", &a, &b); unite(a, b); IN[a]++; IN[b]++; } int flag=1; int temp=find(1); for(int i=1;i<=n;i++){ if(IN[i] & 1)flag=0; if(find(i)!=temp)flag=0; } printf("%d\n",flag); } return 0;}
阅读全文
0 0
- HDU 1879 欧拉回路
- 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 欧拉回路
- 《Unix环境高级编程》 总结 (七)
- maven核心,pom.xml详解
- 数组、链表、堆栈和队列
- mongodb 集群分片搭建
- 将一个项目打成一个jar包,导入到另一个项目中并调用
- HDU 1879 欧拉回路
- hdu6156-(数位dp)
- 学习记录(10)
- scrapy代理ip
- form表单的enctype属性
- 【个人笔记三】ART系统类和方法加载分析
- intellij idea 12/15 报错“非法字符: \65279”
- Python 数据挖掘 常用库
- 剑指offer_栈和队列---包含min函数的栈