图论—欧拉回路/路径
前置知识:欧拉图 (两个要点: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;
}
放在最后
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】