CF1610F Mashtali: a Space Oddysey 做题记录

news/2025/1/24 21:20:37/文章来源:https://www.cnblogs.com/XP3301Pipi/p/18690363

CF1610F Mashtali: a Space Oddysey

Description

给定一张含 \(n\) 个点 \(m\) 条边的无向图,结点编号为 \(1\)\(n\)

每条边有边权 \(w_i\),而 \(w_i\) 只能等于 \(1\)\(2\)。蓝想要给每条边定向,使得图尽可能的可爱。

图的可爱程度定义为图中好的结点的数量。一个结点 \(v\) 是好的,当且仅当令 \(d^+(v)\)\(v\) 所有出边的权值和,令 \(d^-(v)\)\(v\) 所有入边的权值和,有 \(|d^+(x)-d^-(x)|=1\)

试着帮蓝找到图的最大可能可爱程度,并且给出任意一种构造方案。

本题数据满足:\(1 \leq n,m \leq 3\times10^5,1 \leq u_i,v_i \leq n,\mathbf{w_i\in\{1,2\}}\)

Solution

先考虑问题的简化版:所有的 \(w_i=1\)

首先答案有一个上界:度数为奇数的点的个数。现在我们试图让答案达到这个上界。

建立超级源点 \(T\),如果点 \(v\) 的度数为奇数,则新建一条无向边 \((v,T)\)

现在所有节点的度数都是偶数。在新图上跑出一条欧拉回路,回路上经过这条边的方向就是答案中边的方向。

在欧拉回路中,每一个点都被进出相同次。对于一条边 \((v,T)\),如果经过的方向是 \(v \rightarrow T\),那么在原图中就对应 \(d^+(v)-d^-(v)=1\);反之则对应 \(d^-(v)-d^+(v)=1\)

再回到原问题。考虑将图拆为两部分,一部分只包含 \(w_i=1\) 的边,另一部分只包含 \(w_i=2\) 的边,对每一部分用上述方法跑欧拉回路。但我们只能让 \(|d^+(x)-d^-(x)|\) 为奇数的点最大化,无法保证 \(|d^+(x)-d^-(x)|=1\) 个数最大化。

问题出在两个部分不能完全独立。令 \(F(x),S(x)\) 分别表示 \(x\) 在第一、第二部分中对应的点,\(d1(x),d2(x)\) 分别表示 \(x\) 这个点在第一、第二部分中对应点的度数,我们在尝试构造一张新图:

  1. \(w(u,v)=1\),则建边 \((F(u),F(v))\)
  2. \(w(u,v)=2\),则建边 \((S(u),S(v))\)
  3. \(d1(x),d2(x)\) 均为奇数,则建边 \((F(x),S(x))\)
  4. 若只有 \(d1(x)\) 为奇数,则建边 \((T,F(x))\)
  5. 若只有 \(d2(x)\) 为奇数,则建边 \((T,S(x))\)

新图仍然满足所有节点的度数是偶数,但新图的欧拉回路就可以成为答案。

\(V(x)=d^+(x)-d^-(x)\)

对于一个满足条件 \(3\) 的节点,若欧拉回路中方向为 \(F(x) \rightarrow S(x)\),那么对应原图中 \(V(F(x))=1,V(S(x))=-2\),则有 \(V(x)=-1\)。反之则有 \(V(x)=1\)

对于一个满足条件 \(4\) 的节点,分析同上。对于一个满足条件 \(5\) 的节点,其一定不会成为好点。

那么我们的欧拉回路使得所有邻边权值和为奇数的点都成为了好点。

int n,m,T;
int head[N],tot,d1[N],d2[N],ans[N<<1];
bool vis[N],usd[N<<1];#define F(x) x
#define S(x) x+nstruct Edge{int v,id,tp;
};
vector<Edge> e[N];void Add(int u,int v,int w){e[u].push_back({v,w,1});e[v].push_back({u,w,2});
}void dfs(int x){vis[x]=1;for(int i=head[x];i<(signed)e[x].size();i=head[x]){head[x]=i+1;if(usd[e[x][i].id]) continue;usd[e[x][i].id]=1;ans[e[x][i].id]=e[x][i].tp;dfs(e[x][i].v);}
}signed main(){read(n),read(m);for(int i=1;i<=m;i++){int u,v,w;read(u),read(v),read(w);if(w==1){Add(F(u),F(v),i);d1[u]++,d1[v]++;}else{Add(S(u),S(v),i);d2[u]++,d2[v]++;}}int cnt=m,Ans=0; T=2*n+1;for(int i=1;i<=n;i++){if((d1[i]&1)&&(d2[i]&1)) Add(F(i),S(i),++cnt);else if(d1[i]&1) Add(T,F(i),++cnt);else if(d2[i]&1) Add(T,S(i),++cnt);int cd=d1[i]+d2[i]*2;if(cd&1) Ans++;}for(int i=1;i<=T;i++){if(!vis[i]){dfs(i);}}printf("%d\n",Ans);for(int i=1;i<=m;i++) putchar(ans[i]+'0');puts("");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/874882.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟着狂神学java-第一天

Markdown学习 标题 (一个#+空格,一级标题) 二级标题 (两个#+空格,二级标题) 三级标题 (以此类推。。。) 字体helloworld (两个星号,加粗) hello world ( 一个星号,斜体) hello world (三个*,加粗的斜体) hello world (两个~,删除线) hello world…

36. 打印机

一、打印机应用程序一般都有打印功能,可以将重要内容打印成纸质资料。PySide6 支持打印操作,它可以识别系统中已经安装的打印机,驱动打印机进行工作,可以用与打印机有关的类直接打印,也可通过打印对话框进行打印,还可对打印的内容在打印前进行打印预览。与打印有关的类主…

MiniCPM-o 2.6 本地部署记录,Windows+RTX3060全部跑通!

上一篇中,大致聊了下国产小钢炮MiniCPM的特性,看起来很不错,可玩性很高。今天,主要来说一下,如何在本地运行这个项目。 添加图片注释,不超过 140 字(可选)配置过程花了一些时间,最终还是成功了,可以正常进行视频通话,语音通话,和聊天机器人。安装和测试过程中遇到了…

CTF-web-计算器

1.打开题目2.发现只能输入一个数字 3.查看源代码4.修改参数5.可以正确输入后得到flag

CTF-web-web2

1.打开靶场,发现是一个动图。2.通过直接查看源代码,发现flag3.flag :KEY{Web-2-bugKssNNikls9100}

WC 2025 游记

前情提要:CSP 运气好,苟进来了。然后 NOIP 爆炸,没去任何 THU/PKUWC。 Day 1 (1.17) 早上 5:30 起来往火车站跑,太幽默了。 到了就开始摆烂,胸牌只有一面有名字,另一面是“日程安排”。晚上是开幕式,唯一亮点是 dzd 讲话。上大学的时候,政治老师说:资本主义必然灭亡,…

RTE 社区 2024 总结:虽然「卷」,但可以和一群朋友一起,找到自己的速度丨RTE 开发者社区

「如果用一个词来总结你的 2024,将会是什么?」「卷。」「朋友。」「速度。」2025 年 1 月 4 日,小寒前夕,在北京甜水园的苟市和上海静安的 Solution,一群 Real-Time AI&Voice Agent Builder 加入了一场名为 「RTE Dev Party 2024o」的年度开发者聚会。席间觥筹交错,欢…

要成为客户的顾问、朋友、陪跑者

在销售领域,传统的 “推销” 模式正逐步被更为人性化、服务导向的理念所取代。出色的销售人员不再仅仅局限于销售产品,更重要的是身兼客户的顾问、朋友与陪跑者这三重角色。以下为您介绍如何在这三个角色间灵活转换,以此深化客户关系,提高销售业绩。 一、成为客户的顾问专业…

卡特兰数 Catalan

卡特兰数 定义 \(Catalan\) 数列 \(H_n\) 是以下问题的方案数:有一个大小为 \(n n\) 的方格图,左下角为 \((0, 0)\) 右上角为 \((n, n)\),从左下角开始 每次都只能向右或者向上走一单位,不走到对角线 \(y = x\) 上方(但可以触碰) 的情况下到达右上角有多少可能的路径? …

【vjudge训练记录】大一寒假专项训练——并查集

训练情况A题 并查集模板,求班级最多人数和班级数,可以使用map进行统计,取父节点塞进map里面,取最大值和size即可点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;const int N = 1e5 + 3;int fa[N];int n,m;int …

2024山西中考数学第15题

如图,在 $▱ABCD$ 中,$AC$ 为对角线,$AE⊥BC$ 于点 E,点 $F$ 是 $AE$ 延长线上一点,且 $∠ACF = ∠CAF$,线段 $AB$,$CF$ 的延长线交于点 $G$,若 $AB=\sqrt{5}$,$AC=4$,$\tan∠ABC=2$,则 $BG$ 的长为_________.解析 勾股定理+建系 过程 解:由题得,$AE=2$,$BE=1$。…

云--云计算设计模式

https://www.cloudpatterns.org/异常