首页 > 其他分享 >欧拉路相关技术

欧拉路相关技术

时间:2024-12-23 10:58:33浏览次数:4  
标签:度数 连通 int 技术 maxn 顶点 相关 欧拉

基础部分

概念:

  • 欧拉回路:经过每条恰好一次的回路(回到起点)。
  • 欧拉通路:经过每条恰好一次的通路(不回起点)。
  • 欧拉图:具有欧拉回路的图。
  • 半欧拉图:不具有欧拉回路,但具有欧拉通路的图。
  • 有向图强连通:任意两个顶点都可以通过有向边相互到达。
  • 有向图弱连通:将有向边换成无向边后,任意两个顶点连通。

性质:

  • 欧拉图中所有顶点的度数都为偶数(不管有向无向)。
  • 欧拉图为若干环的并,且每条边被包含在奇数个环中。
  • 一张图中只会有偶数奇度数点。
  • 用边互不相交的路径覆盖一张图的边,所需的最少路径数为\(\frac{1}{2}count(奇度数点)\)。

考虑证明最后一个性质:

设有\(2n\)个奇度数点,将其分成两两一组,共\(n\)组。

每组中相互连边,则图中不存在奇度数点,可以用\(1\)条欧拉回路覆盖。

将欧拉回路中新连的边删去,就形成了\(n\)条路径,故\(ans\le n\)。

一条路径至多将两个奇度数点变成偶度数点(即\(2\)个端点),故\(ans\ge n\)。

综上,\(ans=n\)。

判定:

  • 无向图是欧拉图当且仅当:非零度顶点连通且顶点的度数都为偶数。
  • 无向图是半欧拉图当且仅当:非零度顶点连通且恰有两个奇度数顶点。
  • 有向图是欧拉图当且仅当:非零度顶点强连通且每个顶点入度和出度相等。
  • 有向图是半欧拉图当且仅当:非零度顶点弱连通且至多一个顶点入度与出度差\(1\)且至多一个顶点出度与入度差\(1\)且其他每个顶点入度和出度相等

求欧拉路板子:

使用Hierholzer算法。

其核心是不断向当前路中的一个点中加入环。

考虑朴素做法:每次找到一个环,删掉其中所有边,并对其中每个点找环插入到答案中。用链式前向星维护每个点第一条有用的边,时间复杂度\(O(n+m)\)。

复杂度已足够优秀,但是实现很麻烦。实际上朴素做法是将环显示地找到再做其他操作。而找环的顺序对答案是没有影响的,所以我们可以将找环的顺序倒过来,即不必显式地找到当前环,只需在回溯的过程中一边对当前点找环,一边向答案中插入当前环。由于顺序倒过来了,所以答案也倒过来了。

得到流程:

  • 对于当前节点\(u\),遍历其所有未走过的出边\((u,v)\),对\(v\)深搜。
  • 遍历完所有出边后,将当前节点\(u\)加入答案,最终得到的就是一条倒着的欧拉路。

要求字典序最小,对每个顶点的出边排序即可。

无向图中,要对边判重(一条边只能走正边或反边中的一条)。

欧拉路板子题

板子
#include<bits/stdc++.h>

using namespace std;

const int maxn=2e5+10;
int n,m,tot=0,s=0,tp=0,z=0,st[maxn],cur[maxn],head[maxn],ind[maxn];
vector<int> e[maxn];

inline void add(int u,int v){
	e[u].push_back(v);
}

void dfs(int u){
	for(int &i=cur[u];i<e[u].size();){
		dfs(e[u][i++]);
	}
	st[++tp]=u;
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1,u,v;i<=m;++i){
		scanf("%d%d",&u,&v);
		add(u,v);
		ind[v]++;
	}
	for(int i=1;i<=n;++i){
		sort(e[i].begin(),e[i].end());
		if(abs((int)e[i].size()-ind[i])>1){
			puts("No");
			return 0;
		}
		if(e[i].size()>ind[i]){
			if(s){
				puts("No");
				return 0;
			}
			else s=i;
		}
	}
	dfs(s?s:1);
	if(tp!=m+1){
		puts("No");
		return 0;
	}
	for(int i=tp;i>=1;--i){
		printf("%d ",st[i]);
	}
	return 0;
}

标签:度数,连通,int,技术,maxn,顶点,相关,欧拉
From: https://www.cnblogs.com/EmilyDavid/p/18623472

相关文章

  • 最短路相关技术
    板子是一定要记的,但不够,全是思维题,要解放思想开动脑筋。板子Floyd是全源最短路。只要最短路存在(无负环),不管有向无向,边权正负,都可以用。板子for(intk=1;k<=n;++k){for(inti=1;i<=n;++i){for(intj=1;j<=n;++j)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]......
  • 最小生成树相关技术
    注意只有连通图才有生成树,图不连通就只有生成森林。最小生成树的板子Kruskal基本思想是按边权从小到大加边,是贪心思想。时间复杂度\(O(m\logm)\)。板子sort(e+1,e+tot+1,cmp);for(inti=1;i<=tot;++i){ intu=e[i].u,v=e[i].v; u=find(u),v=find(v); if(u==v)continu......
  • 深入探索人工智能的技术热点:生成式AI、强化学习与AI算法优化
    人工智能(AI)技术在不断发展中,带来了许多突破性的进展。我们看到了生成式AI在图像、文本生成等领域的广泛应用,也见证了强化学习在复杂决策问题中的成功实践。同时,随着AI技术逐渐走向实际应用,算法优化与效率提升成了新的技术焦点。在这篇博客中,我们将重点讨论目前在人工智能领域的......
  • .NET 9 New features-AOT相关的改进
    上一篇文章给大家介绍了.NET9Newfeatures-JSON序列化 本篇文章,研究分享一下关于AOT方面的改进1.什么是AOTAOT(Ahead-of-Time)编译是一种在应用程序部署之前,将高级语言代码直接编译为本机机器代码的技术。与传统的即时编译(Just-In-Time,JIT)不同,AOT在应用程序运行之前完成编......
  • 汽车电子技术框架
    0Preface写在汽车行业发展的拐点。最近这十年,汽车行业已经从传统行业一跃转变为高科技产业。随着电动化和智能化的发展,汽车形态已经从传统的燃油车转变为智能终端。同时,汽车已经从硬件主导转变为软件定义,最近随着AI大模型的突破,隐隐的升级为AI定义汽车。技术的发展对于传统......
  • 什么是RIAD技术?
    RAID(RedundantArrayofIndependentDisks)即独立磁盘冗余阵列,是一种把多个独立的物理磁盘按不同的方式组合起来形成一个逻辑磁盘阵列的技术,以下是详细介绍:一、RAID的主要目的1、提高性能        通过数据条带化(DataStriping)来实现。例如,在RAID0中,数据被分割成......
  • "该系统对指定的帐户没有授权,因此无法完成此操作。请使用与此帐户相关联的提供程序重
    使用net命令改不了用户口令通过mmc添加用户管理模块没有在计算机管理中也没有用户管理查看设置里目前只用了这两种登录方式并且下面的“仅允许使用windowshello登录”是打开的当关掉上面选项后就出现密码登录功能了......
  • 基于HarmonyOS 5.0的元服务:技术架构、应用场景与未来发展【探讨】
    基于HarmonyOS5.0的元服务:技术架构、应用场景与未来发展【探讨】引言随着数字化技术的不断进步,智能设备的互联互通成为科技发展的主流方向。华为的HarmonyOS5.0系统在这一趋势下推出了创新性的“元服务”概念。元服务(SuperService)是鸿蒙系统中的一种新型服务架构,旨在为用户......
  • 【PHP安全】php程序源码保护技术
    一、基本介绍二、加密方式2.1源码混淆处理2.1.1PHP威盾混淆2.1.2php-obfuscator2.2YAKPro混淆处理2.3源码外壳加密2.3.1PHPEval加密2.3.2PHPEval变异2.3.3phpjiami处理2.4源码扩展加密2.4.1ph......
  • 免费下载 | GBT 44109 2024 信息技术 大数据 数据治理实施指南
    GB/T44109—2024《信息技术大数据数据治理实施指南》提供了大数据环境下数据治理实施的过程指南,包括规划、执行、评价和改进四个过程的相关活动及内容。适用于指导组织开展数据治理实施工作。以下是该标准的核心内容概述:1.范围提供大数据环境下数据治理实施的过程指南......