/* 复制文字时自动加版权 */
穹妹天下第一!|

Sora~悠远的苍穹

园龄:3年11个月粉丝:1关注:2

2023/6/10 学习笔记

欧拉图

欧拉图的定义

欧拉回路:所有的边都经历一次不重复的回路

欧拉通路:所有的边都经历一次不重复的路径

欧拉图:具有欧拉回路的图

半欧拉图:具有欧拉通路的图

 连通图只有0个或者偶数个奇数出度点

判别方法:

1.无向图欧拉回路:

(1)除去度为0的点外,其他的点相互连通

(2)顶点度数都是偶数

2.无向图欧拉通路:

(1)除去度为0的点外,其他的点相互连通

(1)具有0个或者偶数个奇数度顶点

3.有向图欧拉回路:

(1)非零度顶点是强连通图

(2)每个顶点的入度和出度数相同

4.有向图欧拉通路

(1)非零度顶点是弱连通图

(2)至多一个顶点的出度与入度之差为 1

(3)至多一个顶点的入度与出度之差为 1

(3)其他顶点的入度和出度相等

例题洛谷p1636

https://www.luogu.com.cn/problem/P1636

根据上面的无向图欧拉通路和连通图具有偶数个奇数度点,我们可以知道,两个奇数度点之间有一条欧拉通路,所以我们可以数奇数度点的个数,然后除以2就是我们要求的欧拉通路个数也即本题要求的笔画个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//code<br><br>#include<iostream>
#define maxm 100005
using namespace std;
 
int vis[maxm];
 
int main(){
    std::cin.tie(0);
    std::ios::sync_with_stdio(false);
    int n,m,ant=0;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int u,v;
        cin>>u>>v;
        vis[u]++;
        vis[v]++;
    }
    for(int i=1;i<=n;i++){
        if(vis[i]%2!=0){
            ant++;
        }
    }
    if(ant==0){
        printf("1\n");
    }
    else{
        printf("%d\n",ant/2);
    }
    return 0;
}

 

本文作者:oisoraku

本文链接:https://www.cnblogs.com/oisoraku/p/17471790.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Sora~悠远的苍穹  阅读(14)  评论(0编辑  收藏  举报
   
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起