尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

赛前训练3 欧拉路

赛前训练3 欧拉路
📅 发布时间:2026/6/19 22:56:35

以下,斜体表示注意点,粗体表示技巧点。

无向图欧拉路径的判定:

  • 除去孤点之外图联通。

  • 度数为奇数的点只有 \(0\) 或 \(2\) 个。

有向图欧拉路径的判定:

  • 除去孤点之外图联通。

  • 出度比入度大一或入度比出度大一的有 \(0\) 或 \(2\) 个。

  • 除了第二条中的点,全都是入度等于出度的点。

A

拆边,空间大小翻倍。

将每条边拆成两条,然后跑有向图欧拉路径即可。

实现
#include<bits/stdc++.h>
#define int long long
using namespace std;const int N=1e4+5;
int n,m,cnt;
int ans[N*10];
vector<int> G[N];void dfs(int cur){for(int &i:G[cur]){if(i){int x=i; i=0;dfs(x);}}ans[++cnt]=cur;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n>>m;for(int i=1,u,v;i<=m;i++){cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}cnt=0,dfs(1);for(int i=cnt;i>=1;i--)cout<<ans[i]<<'\n';return 0;
}

B

判孤点。

对于每个连通块,累加其贡献,即连通块中度数为奇数点的个数的一半,孤点和没有奇数点的情况不算。

实现
#include<bits/stdc++.h>
#define int long long
using namespace std;const int N=2e5+5;
int n,m,cnt,siz;
int d[N],dfn[N];
vector<int> G[N];void dfs(int cur){if(d[cur]&1)cnt++;dfn[cur]=1,siz++;for(int i:G[cur])if(!dfn[i])dfs(i);
}
void solve(){for(int i=1;i<=n;i++)G[i].clear(),d[i]=dfn[i]=0;for(int i=1,u,v;i<=m;i++){cin>>u>>v;G[u].push_back(v);G[v].push_back(u); d[u]++,d[v]++;}if(!m){cout<<"0\n";return;}int ans=0;for(int i=1;i<=n;i++){if(!dfn[i]){cnt=siz=0,dfs(i);if(siz>1)ans+=1+(cnt>2?(cnt-2)/2:0);}}cout<<ans<<'\n';
}signed main(){ios::sync_with_stdio(0);cin.tie(0);for(;cin>>n>>m;solve());return 0;
}

C

仍然考虑拆边,于是题目转化为边翻倍之后有多少种方案使得删掉两条边后仍具有欧拉回路。

删掉两条边理论上会增加四个奇数点,但可以删掉共点的边,这一部分贡献是 \(\sum \operatorname{C}^2_{d_i}\)(\(d_i\) 为点 \(i\) 的度数)。

注意到这题有自环,于是我们可以选两个不同的自环,贡献为 \(\operatorname{C}^2_{tot}\)(\(tot\) 为自环个数);也可以选一个自环和一个普通边,贡献为 \(tot \times (m-tot)\)。

实现
#include<bits/stdc++.h>
#define int long long
using namespace std;const int N=2e6+5;
int n,m;
int d[N],fa[N];
bool vis[N];int fnd(int x){return x==fa[x]?x:fa[x]=fnd(fa[x]);
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n>>m;for(int i=1;i<=n;i++)fa[i]=i;int tot=0;for(int i=1,u,v;i<=m;i++){cin>>u>>v;vis[u]=vis[v]=1;if(u==v){tot++;continue;}d[u]++,d[v]++;u=fnd(u),v=fnd(v);if(u!=v)fa[u]=v;}int root=0;for(int i=1;i<=n;i++)if(fa[i]==i&&vis[i])root++;if(root>1){cout<<0;return 0;}int ans=tot*(tot-1)/2+tot*(m-tot);for(int i=1;i<=n;i++)ans+=d[i]*(d[i]-1)/2;cout<<ans;return 0;
}

相关新闻

  • CF global round 29 CD
  • go语言复杂的map
  • CF700E Cool Slogans 做题记录

最新新闻

  • 嵌入式MCU电气特性与FLASH操作深度解析:从数据手册到稳定设计
  • 2026 郑州八大装修公司综合实力排行榜 - GrowthUME
  • 爱回收到店估价和到手价差多少?iPhone 15 Pro实测报告 - 新闻快传
  • 2026沈阳非急救转运救护车TOP5盘点|辽中同城、浑河跨桥、棋盘山山地、院区转诊首选康跃转运 - 吉修匠
  • 2026长沙防水补漏权威指南:卫生间/屋面/外墙/地下室正规施工+透明报价+避坑全攻略 - 苏易修缮
  • 爱回收靠谱吗?一个测评博主的深度复盘 - 新闻快传

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号