图论杂项

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 【模板】欧拉路径

模板题,写了就行

posted @ 2024-08-19 11:46  zuoqingyuan111  阅读(5)  评论(0编辑  收藏  举报