首页 > 其他分享 >图论杂项

图论杂项

时间:2024-08-19 11:49:20浏览次数:6  
标签:图论 有向图 联通 出度 路径 无向 杂项 欧拉

rt,一些琐碎的知识点,可能会补充例题。

欧拉路径

定义

  • 欧拉路径:每条边都通过一次的路径。

  • 欧拉回路:起点和终点都相同的路径。

  • 有向图弱联通:将有向边当成无向边后原图联通

分析

对于欧拉路径的判定,通常从点的出度和入度下手分析。下面以无向图为例分析。

如果一个点是起点。从这个点出发以后,每经过一次这个点,都要从一条入边进,一条出边出。

可以推断出这个点的度数一定是奇数,同理可以得到终点的度数为奇数。

特殊的,如果最后从一条入边回到起点,则可以找到一条欧拉回路。

判断结论:

  1. 无向图存在欧拉路径:无向图联通,且仅两个点度数为奇数

  2. 无向图存在欧拉回路:无向图联通,所有点度数均为偶数

  3. 有向图存在欧拉路径:有向图弱联通,且一个点入度比出度少一,一个点出度比入度少一,其余点入度等于出度

  4. 无向图存在欧拉回路:有向图弱联通,所有点入度均等于出度。

实现

欧拉路径的查找通常使用 \(\text{DFS}\)。

//有向图DFS:

//cout<<x<<" "; 错误写法
for(int i=last[x];i<g[x].size();i=last[x]){
   last[x]=i+1;
   dfs(g[x][i]);
}
stk[++top]=x;

output:

dfs(s);
 while(top)printf("%d ",stk[top--]);

第一种写法的错误之处在于没有将欧拉路径嵌套在一起,导致欧拉路径分成了多个不连续的段落。

往往一张图的欧拉路径有许多,题目会要"输出字典序最小的方案"。常见的处理方法是贪心:用 vector 存图,将每一个图所联通的点按大小排序。

例题

P7771 【模板】欧拉路径

模板题,写了就行

标签:图论,有向图,联通,出度,路径,无向,杂项,欧拉
From: https://www.cnblogs.com/zuoqingyuan/p/18367024

相关文章

  • 图论基础
    定义与记号涉及常见或可能用到的概念的定义。关于更多,见参考资料。基本定义图:一张图\(G\)由若干个点和连接这些点的边构成。称点的集合为点集\(V\),边的集合为边集\(E\),记\(G=(V,E)\)。阶:图\(G\)的点数\(|V|\)称为阶,记作\(|G|\)。无向图:若\(e\inE\)没有......
  • 算法刷题记录 八十五【图论的广度优先搜索理论基础】
    前言图论章节第2篇。第1篇:记录八十二【图论理论基础及深度优先搜索算法】;本文:记录八十五【图论的广度优先搜索理论基础】一、广度优先搜索理论基础广度优先搜索理论基础参考链接1.1知识点框架1.2模拟广度搜索的过程在有向图中,以下图为例,如何进行广度优先搜索......
  • 杂项
    位运算加速技巧乘/除以\(2^n\),改为<<n或>>n交换两个数,swap(a,b)改为a^=b,b^=a,a^=b小数转整数,(int)3.14改为3.14>>0正负号转换,x=-x改为x=~x+1当\(x=2^n\)时,%x改为&(x-1)检查是否整除\(2\)时,i%2改为i&1求绝对值,abs(x)改为(......
  • 算法学习笔记-----图论基础
    基础知识两种存储方式:邻接矩阵、邻接表。两种遍历:dfs,bfs。图的遍历考虑深搜,发现出现环的情况进行不下去。一种可行的方案是反向建边后从最后一个点往后开始dfs或bfs。#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;constintmaxn=1e5+3;v......
  • 图论练习题
    [NOIP2003]神经网络1.题意看懂以后就是计算一下每一个入度0的点最终的状态,并且如果这个状态>0就输出出来,对于阈值,我们可以在一开始就对这些入度的0的点直接减去阈值。2.然后就是一个拓扑排序的模型,因为我们要计算一个点的状态是需要这个点前面相连的所有点的状态而来,因此很容易......
  • 【学习笔记】Matlab和python双语言的学习(图论最短路径)
    文章目录前言一、图论基本概念示例二、代码实现----Matlab三、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187QF?p=36&vd_source=67471d3a1b4f517b7a7964093e62f7e6一、图论图论(G......
  • 图论基础实现
    图的存储使用邻接表来存储#include<bits/stdc++.h>usingnamespacestd;structedge{intu,v;};vector<edge>e;intn,m;//n个点,m条边//如何证明一条边存在呢?直接枚举即可boolfind_edge(intu,intv){for(inti=1;i<=m;i++)if(e[i].u==u&&e[i].v==v)r......
  • 算法小总结-图论
    拓扑排序[HNOI2015]菜肴制作////Createdbyfxzon2024/8/3.//#include<bits/stdc++.h>usingnamespacestd;intans[1008611];#defineintlonglongboolTopSort(vector<vector<int>>&G,intn,vector<int>&inDegree){......
  • 代码随想录算法训练营第64天 | 图论:Floyd 算法+A * 算法
    97.小明逛公园https://kamacoder.com/problempage.php?pid=1155Floyd算法精讲https://www.programmercarl.com/kamacoder/0097.小明逛公园.html#floyd-算法精讲Floyd算法精讲问题总结:双向道路;路径规划;多个起点到多个终点核心思想:动态规划确定dp数组和下标含义:grid......
  • Studying-代码随想录训练营day62| Floyd 算法精讲、A*算法精讲(A star算法)、最短路算法
    第62天,完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★*,最后的两个算法学习,编程语言C++目录Floyd算法精讲A*算法精讲(Astar算法) A*算法 复杂度分析 A*算法的缺点最短路算法总结篇 图论总结深搜和广搜并查集最小生成树 拓扑排序 最短路算法 总结 Floyd算法精讲......