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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步