hdu-1878欧拉回路
欧拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13320 Accepted Submission(s): 4972
束。
起始顶点 1 2 3 4 5
起始父节点 1 2 3 4 5
1---2
1---3
1---4
1---5
2---3
2---4
3---5
4---5
1.并查集
若为欧拉图,相当于图中所有顶点都相连(类比最小生成树),所以除了根节点以外,每个顶点都指向其他顶点(最终都指向跟节点)
欧拉图顶点 1 2 3 4 5
父节点 2(!1) 3(!2) 4(!3) 5(!4) 5
这里假设顶点6是根节点
判断一个图是否为欧拉回路充要条件是 判断图中所有顶点的度是否都为偶数,还需判断是否为联通图。 判断联通图方法为并查集,这里使用最简单的并查集
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
using namespace std;
#define INF 0x3f3f3f3f
const int MaxV = 1005;
int degree[MaxV],fa[MaxV];//分别表示顶点的度数和顶点的父节点,就是指向该点的顶点
int N,M;
int find(int x)//获取根节点
{return fa[x]==x?x:find(fa[x]);
}
int main(){while(scanf("%d",&N)){if(N==0)break;scanf("%d",&M);memset(degree,0,sizeof(degree));//初始所有节点的度为0for(int i = 1 ; i <= N; i++)fa[i] = i ; //所有结点的父节点都是自身for(int i = 0 ; i < M ; i ++){int u,v;scanf("%d%d",&u,&v);degree[u]++; //无向图,出度+1degree[v]++; //入度+1int x = find(fa[u]);int y = find(fa[v]);if(x!=y) //判断输入的两个顶点是否属于同一个树,即是否联通fa[x]=y; //如果不联通,将其联通}bool t1=false,t2=true ;int cnt = 0 ;for(int i = 1 ; i <= N ; i++){if(fa[i] == i ) //判断所有顶点是否联通,若联通说明每个顶点的父节点都为某个顶点cnt++; //也就是说所有顶点中只有一个顶点与父节点相同if(degree[i]&1){ //判断每个顶点的度数是否为奇数,一旦是,则证明不是欧拉图t2 = false ;break;}}if (cnt == 1)t1= true;if(t1 && t2 )printf("1\n");//两个条件同时成立说明为欧拉图else printf("0\n");}return 0;
}
2 .dfs
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include<cstdio>
using namespace std;
#define INF 0x3f3f3f3f
const int MaxV = 1005;
int vis[MaxV];
vector<int>vec[MaxV];
int N,M;
void dfs(int i ){vis[i] = 1;vector<int>::iterator it;for(it = vec[i].begin() ; it!=vec[i].end(); it++){if(vis[*it] == 0)dfs(*it);}
}
int main(){while(scanf("%d",&N)){if(N==0)break;scanf("%d",&M);memset(vis,0,sizeof(vis));for(int i = 1 ; i <= N; i++)vec[i].clear();for(int i = 0 ; i < M ; i ++){int u,v;scanf("%d%d",&u,&v);vec[u].push_back(v);vec[v].push_back(u);}dfs(1);int cnt = 0 ;bool t1 = false ,t2 = true;for(int i = 1 ; i <= N ; i++){if(!vis[i])cnt++;if(vec[i].size()&1){t2 = false ;}}if (!cnt)t1= true;if(t1 && t2 )printf("1\n");//两个条件同时成立说明为欧拉图else printf("0\n");}return 0;
}
hdu-1878欧拉回路相关推荐
- Hdu 1878 欧拉回路[判断是否存在欧拉回路]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 题目的意思很简单,就是给你一个无向图..问存在欧拉回路吗?Yes or No.1000个节点.. ...
- hdu 1878 欧拉回路
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1878 欧拉回路(入门)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 1116 欧拉回路 并查集 一组字符串能否首尾相连成一个字符串
主要是欧拉回路的基础知识,用并查集加工处理 注意欧拉回路和并查集的细节判断 不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间 #include <stdio.h> #inclu ...
- hdoj 1878 欧拉回路
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 杭电-1878 欧拉回路
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- uoj 117 欧拉回路
1.判断是否为欧拉存在欧拉回路---裸的判断 欧拉回路就是看一笔能不能把途中所有的边跑完没得重复 对于无向边----建立双向边判断每个点的入度是否为2的倍数 1.1 对于有向边---建立单向边判断 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 蓝书3.7 欧拉回路
T1 欧拉回路 hdu 1878 题目大意: 判断是否存在欧拉回路 思路: 一个无向图存在欧拉回路的条件为所有点的度为偶数 且图联通 1 #include<iostream> 2 #inc ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
最新文章
- 华硕WL-500W无线路由器使用感受
- MySQL 高频面试题,都在这了
- BZOJ4432 : [Cerc2015]Greenhouse Growth
- 用stream将dgv中的数据导出到word或excel中小例子
- MongoDB服务启动与停止命令(Windows环境)
- Python——sys.stdout.flush()方法的作用
- ios 开发证书导出p12文件_开发者在上传企业签名的应用到后,做到如下几点
- C++ 中的this指针详解及实例
- 古代大臣上朝时手里拿的是什么东西
- 用枚举enum实现单例
- MySQL备份与恢复————用LVM快照恢复
- python简说(十八)导入模块
- [MDB] EXP 导入数据库
- 【MySQL】关系型数据库基本知识点
- 小米智能插座接入HomeKit
- 一个优秀的商业分析师是如何炼成的
- python通信信号处理_python学习笔记——信号模块signal(示例代码)
- java+selenium——查找定位元素,elements复数定位(driver.findElementsByClassName(mnav);)002...
- 音频文件 数据库存储_刚哥谈架构 (六) 谈谈数据库架构
- Linux中的竖线(|)意义——管道符号的简单介绍
热门文章
- js中every用法_Javascript Array.every()方法
- 论文记录3_CycleGAN-损失函数部分
- 下列关于java泛型的说法正确_下列关于泛型的说法不正确的一项是:( )_学小易找答案...
- 成功需要“十商”(网络转载)
- 《程序员的自我修养》读书笔记——动态链接
- 猫影视配置2022.06.04
- 兄弟连区块链入门教程分享区块链POW证明代码实现demo
- 清明节快到了,车辆尾号限行规则提前看!一文带你了解全国各地的尾号限行规则
- 利用linux BT5来破解无线 破解无线
- 网络防御 --- 恶意软件与反病毒详解