图论—欧拉回路/路径

前置知识:欧拉图 (两个要点:1.是连通图才有欧拉回路2.是否满足出度和入度的要求)

模板题 :P7771 【模板】欧拉路径 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

欧拉回路

1.• 对于无向图,欧拉回路就是在图的所有结点的度都是偶数,并且图是连通的情况下,从任意一个节点开始 dfs 都可以回到原点。
一道典题:P6066 [USACO05JAN] Watchcow S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)从一点出发回到这一点的欧拉回路
2.P2731 [USACO3.3] 骑马修栅栏 Riding the Fences - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 欧拉回路需要考虑重边是否计算

欧拉路径

1.https://www.luogu.com.cn/problem/UVA10129 欧拉路径的应用题,对于每个单词都要出现一次相当于欧拉路径中每条边都有出现一次,要考虑如何保留边的信息
2.对于判连通图来说,dfs有可能会爆栈,那么可以改用并查集

寻找欧拉路径

//对于稠密图,删边操作还是很重要的,否则可能会T
void dfs(int u){
	for(int i = vis[u];i<G[u].size();i = vis[u]){
		vis[u] = i+1;//删边操作很重要,当边特别大时
		dfs(G[u][i]);
	}
	st.push(u);
}

判断是否能够形成欧拉回路/路径(省略判连通图)

fa(i,1,n){
		if(d[i][0] != d[i][1]){
			tag = 0;
			if(d[i][0]-d[i][1]==1) mp[0]++,start = i;
			else if(d[i][1]-d[i][0]==1) mp[1]++;
			else {
				cout<<"No"<<endl;
				return 0;
			}
		}
	}
	if((!tag)&&!(mp[0] == mp[1]&&mp[1] == 1)) {
		cout<<"No"<<endl;
		return 0;
	}

放在最后

posted @   sazhichi  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示