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

CF527E Data Center Drama

CF527E Data Center Drama
📅 发布时间:2026/6/19 23:08:23

题目传送门

考虑题目本质是要求每个点的出度入度都是偶数。

转化一下,就是每个点度数为偶数,出度为偶数。(其实这也是一张图存在欧拉回路的充要条件),这里不讲欧拉回路做法。

显然的总边数一定得是偶数,给出一种构造可以说明这是充要条件。

图保证了联通,我们先跑出一颗 DFS 树,然后考虑给非树边随意定向,然后对于每条树边,从下往上看,如果当前点出度为奇数,那么连向父亲,否则连向自己。

由于总边数为偶数,所以根节点出度一定为偶数(其他点出度都为偶数)。

代码十分好写。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define getchar() (p1 == p2 && (p2 = (p1 = buf1) + fread(buf1, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf1[1 << 23], *p1 = buf1, *p2 = buf1, ubuf[1 << 23], *u = ubuf;
namespace IO
{template<typename T>void read(T &_x){_x=0;int _f=1;char ch=getchar();while(!isdigit(ch)) _f=(ch=='-'?-1:_f),ch=getchar();while(isdigit(ch)) _x=_x*10+(ch^48),ch=getchar();_x*=_f;}template<typename T,typename... Args>void read(T &_x,Args&...others){Read(_x);Read(others...);}const int BUF=20000000;char buf[BUF],to,stk[32];int plen;#define pc(x) buf[plen++]=x#define flush(); fwrite(buf,1,plen,stdout),plen=0;template<typename T>inline void print(T x){if(!x){pc(48);return;}if(x<0) x=-x,pc('-');for(;x;x/=10) stk[++to]=48+x%10;while(to) pc(stk[to--]);}
}
using namespace IO;
const int N = 5e5+10;
int n,m,x,y,head[N],cnt,in[N],T[N],v[N],siz[N],cnt1,cnt2,v1[N<<1],id[N<<1];
struct w
{int to,nxt;
}b[N<<1];
inline void add(int x,int y)
{b[++cnt].nxt = head[x];b[cnt].to = y;head[x] = cnt;
}
void dfs(int x,int y)
{v[x] = 1;for(int i = head[x];i;i = b[i].nxt)if(!v[b[i].to]){v1[id[i]] = 1;dfs(b[i].to,x);}else if(!v1[id[i]]){v1[id[i]] = 1;print(x),pc(' '),print(b[i].to),pc('\n');siz[b[i].to]++;}if(y){if(siz[x]%2==1) print(y),pc(' '),print(x),pc('\n'),siz[x]++; else print(x),pc(' '),print(y),pc('\n'),siz[y]++; }
}
signed main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);read(n),read(m);for(int i = 1;i <= m;i++){read(x),read(y),in[x]++,in[y]++;add(x,y),add(y,x); id[cnt] = id[cnt-1] = cnt1,cnt1++;}for(int i = 1;i <= n;i++)if(in[i]%2==1) T[++cnt2] = i;for(int i = 1;i <= cnt2;i += 2)add(T[i],T[i+1]),add(T[i+1],T[i]),id[cnt] = id[cnt-1] = cnt1,cnt1++,m++;if(m%2 == 1) in[1] += 2,add(1,1),add(1,1),id[cnt] = id[cnt-1] = cnt1,cnt1++,m++;print(m),pc('\n');dfs(1,0);flush();return 0;
}
/*
每个点出度入度都是偶数,构造一个方案,在加尽量少的边使得可以做到
先保证每个点的连边个数是偶数,这个每条边都是两个点in_i+1,然后度数是奇数的一定有偶数个
因为你每次选两个点加一:
点相同,不变
奇偶性不同,翻转不变
奇偶性相同,+-2,还是不变 
然后定向是给一个点D_i++
如果每个点度数为偶数,且边数为偶数,那么一定就合法了(证明考虑不断删环递归子问题) 
先随意的给度数为奇数的连一下边
如果接下来边数还为奇数,随便来一个自环
考虑定向,我们可以每次找环,T飞就是了
环的话,我们先套路的跑出dfs树,对于非树边随便连边
然后对于树边,如果siz%2=1,那么连父亲,否则父亲连我,siz++
显然所有点合法时,根也合法 
*/

相关新闻

  • 2025年热门的家具五金厂家推荐及采购指南
  • 2025年评价高的珠宝首饰亚克力展示架实力厂家TOP推荐榜
  • 2025年耐用的除尘风机品牌厂家排行榜

最新新闻

  • 2026昆山屋顶防水市场深度分析与服务商适配推荐:聚焦本地需求的优质选择 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年卫生间隔断工厂综合盘点:传炼装饰工程成为工装项目首选
  • 如何快速掌握Umi-OCR:面向初学者的免费离线文字识别全攻略
  • VRT:视频复原Transformer——原理深度解析与技术实现
  • 武汉家具安装推荐良匠千艺2026口碑榜 - 我叫一
  • 2026昆山卫生间防水服务商适配指南:昆山鼎壹万机构解析及5家优质服务商推荐 专业瓷砖空鼓维修公司排名推荐(2026年5月瓷砖空鼓维修最新TOP权威排名) - 鼎壹万修缮说

日新闻

  • 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 号