JD 1027:欧拉回路

2024-09-07 03:18
文章标签 欧拉 1027 回路 jd

本文主要是介绍JD 1027:欧拉回路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OJ题目:click here~~

题目分析:

若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路
具有欧拉路径的图称为欧拉图(简称E图)。
无向图存在欧拉回路的充要条件:
一个无向图存在欧拉回路,当且仅当该图拥有奇数度数的顶点的个数为0且该图是连通图。
有向图存在欧拉回路的充要条件:
一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。
并查集判断图是否连通 + 判断顶点的度是否为偶数
const int maxn = 1008 ;
int deg[maxn] ;
int fa[maxn] ;
void init(){for(int i = 0;i < maxn;i++)fa[i] = i ;
}int GetFath(int x){if(x == fa[x]) return x ;return fa[x] = GetFath(fa[x]) ;
}void Merg(int u , int v){int fu = GetFath(u) ;int fv = GetFath(v) ;if(fu != fv){fa[fu] = fv ;}
}int main(){int n , m ;while(cin >> n){if(n == 0) break ;cin >> m ;init() ;int a , b , i , j , k ;memset(deg , 0 , sizeof(deg)) ;for(i = 0;i < m;i++){scanf("%d%d",&a,&b) ;deg[a]++ ;deg[b]++ ;Merg(a , b) ;}set<int> s ;for(i = 1;i <= n;i++)s.insert(GetFath(i)) ;if(s.size() != 1){puts("0") ;continue ;}else{for(i = 1;i <= n;i++)if(deg[i]&1) break ;if(i <= n) puts("0") ;else puts("1") ;}}return 0 ;
}


这篇关于JD 1027:欧拉回路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143903

相关文章

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整

nyoj42(并查集解决欧拉回路)

一笔画问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

JD 1474:矩阵幂

OJ题目:click here~~ 题目分析:经典题目,矩阵快速幂。 typedef vector<int> vec ;typedef vector<vec> mat ;int n ;mat mul(mat &A , mat &B){mat C(n , vec(n)) ;for(int i = 0;i < n;i++)for(int j = 0;j < n;j++)for(int k

JD 1497:面积最大的全1子矩阵

OJ题目:click here~~ 题目分析:经典题目。。 const int maxn = 1008 ;int n , m ;int x[maxn][maxn] ;int h[maxn] , Left[maxn] , Right[maxn] ;void check(int &a , int b){if(b > a) a = b ;}void all_1_matrix()

JD 1147:Jugs(一种用最少步骤求解的方法)

OJ题目:click here~~ 题目分析:九度上这道没有要求最少步数,只要得到最后结果即可AC , bfs , dfs都行。最少步骤的方法肯定也能AC啦,分析如下。 输入的三个数:a,b,n;> 由题不定方程ax+by=n必定有解> 如果b=n,则fill B即可,否则用试探法求出这样的两组解(a1,b1)及(a2,b2),其中a1 >0,b1<0;a1是满足方程的最小正整数;a2

JD 1204:农夫、羊、菜和狼的故事

OJ题目:click here~~ #define vegetable_go 0#define vegetable_come 1#define sheep_go 2#define sheep_come 3#define wolf_go 4#define wolf_come 5#define nothing_go 6#define nothing_come 7using