D230809E. 勇敢的阿乐

news/2025/10/14 19:49:29/文章来源:https://www.cnblogs.com/needna/p/19141872

题意:

一个 包含 \(n\) 个点 \(m\) 条边的简单无向连通图。现在,删掉其中的一些边让度数为奇数的点尽可能多。

输出要删掉哪些边, 用一个长为 \(m\)01串 表示, 第 \(i\) 位为 \(1\) 表示不删第 \(i\) 条边, 为 \(0\) 表示删掉第 \(i\) 条边。并满足这个 01串 的字典序尽量大。

对于 \(100 \%\) 的数据, \(2 \leq n \leq 6 * 10^{5}, n-1 \leq m \leq 9 * 10^{5}, 0 \leq x_{i} \leq y_{i}<n\), 对任意 \(i \neq j\), 有 \(\left(x_{i}, y_{i}\right) \neq\left(x_{j}, y_{j}\right)\), 且保证给定的图连通。

题解:

先考虑是树有什么性质。若点数为偶数,那么度数为偶数的点必然有偶数个。因为度数和一直为偶数。

那么我们可以考虑任意两两偶数点配对,其路径上所有边状态翻转。那么这样答案是一定的。因为考虑一个边子树内的情况,若子树内有偶数个度数为偶数的点,那么其外侧也会有偶数个度数为偶数的点,那么一定会越过这条边偶数次,反之则一定是奇数次,所以是确定的。

根据这一点,我们可以快速判断每个点的状态,只需要记录子树内部的度数为偶数的点的和即可,我们把这个东西给成点权,这样方便做题。

接下来考虑奇数个点的情况,先还是判断每条边是否可能删除。但是注意,这时候我们构造出来的东西就不大一样了,我们在 dfs 中让子树内部的度数为偶数的点的和为偶数的点保留,其他删除,那么最终 \(1\) 号点的度数一定为偶数,其他都是奇数。因为递归的时候还是保持的相同策略,所以结果不变。

这样虽然满足了度数为奇数的点尽可能多,但是没有满足字典序尽量大,考虑处理这个东西。

我们思考怎么改变答案,就是让 \(1\to u\) 链上翻转一下,看这个答案是否比原来大。可以树剖线段树 \(+\) hash 来做这玩意,但是我们有更好的方法。

我们按照边的编号从小到大搞,这个时候我们能不删除就不删除,显然满足了题意。考虑若出现了要删除的边,考虑能否换掉原来度数为偶数的点,使其不用删掉。这时我们进行分类。

设原来的点为 \(h\) 现在的点为 \(v\),那么我们已经翻转了 \(1\to h\) 的点权。

\(v\) 对应的边本来要删掉:

  • \(v\)\(h\) 的祖先,那么自然不用删了,因为翻转了。
  • \(v\)\(h\) 没有祖先后代关系,那么该删就要删。
  • \(v\)\(h\) 子树内但是 \(1\to v\) 的路径上有编号比 \(v\) 小的点是没有删的,那么我们还是要删这一点,因为不删前面更小的边就要保留了,不符合贪心。
  • \(v\)\(h\) 子树且 \(1\to v\) 的路径上所有编号比 \(v\) 小的点都删除了,我们翻转边权并让 \(h=v\)

\(v\) 对应的边本来要保留:

  • \(v\)\(h\) 的祖先,那么翻转了,必须删掉。

  • 否则我们保留,并且将其记录下来,表示没有删除。

接下来考虑图,其实很简单,我们都证明了答案最大只要是树就可以,那我们让图上挖一颗树,使得其最小编号最大,这不就是最大生成树吗,所以还是在树上做。

code:

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define lbt(x) (x&(-x))
#define pii pair<int,int>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=2e6+10;
int n,m,k,T,a[N],fa[N],out[N],dfn[N];
int cnt,t[N],val[N],ans[N],vv[N],idx[N];
vector<pii> g[N];struct node{int u,v;}e[N];
int find(int x){if(fa[x]==x) return x;return fa[x]=find(fa[x]);
}
int dfs(int u,int fa){dfn[u]=++cnt;int nw=0;for(pii t:g[u]){int v=t.fi,id=t.se;if(v==fa) continue;int p=dfs(v,u);if(!p) ans[id]=1;nw+=p;idx[id]=v;}out[u]=cnt;return (((val[u]&1)^1)+nw)&1;
}
void upd(int i,int x){while(i<N){t[i]+=x;i+=lbt(i);}}
int sc(int i){int ans=0;while(i>0){ans+=t[i];i-=lbt(i);}return ans;}
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m;rep(i,1,n) fa[i]=i;rep(i,1,m){int x,y;cin>>x>>y;e[i]={x+1,y+1};}per(i,m,1){int u=e[i].u,v=e[i].v;val[u]++,val[v]++;if(find(u)!=find(v)){vv[i]=1;fa[find(u)]=find(v);g[u].pb({v,i});g[v].pb({u,i}); }else ans[i]=1;}dfs(1,0);if(n%2==0){rep(i,1,m) cout<<ans[i];}else{int h=1;rep(i,1,m){int v=idx[i];if(!vv[i]){cout<<1;continue;}if(!ans[i]){if(dfn[v]<=dfn[h]&&dfn[h]<=out[v]){cout<<1;continue;}if(dfn[v]<dfn[h]||out[h]<dfn[v]||sc(dfn[v])>0) cout<<0;else h=v,cout<<1;}else{if(dfn[h]<dfn[v]||out[v]<dfn[h]){cout<<1;upd(dfn[v],1);upd(out[v]+1,-1);}else cout<<0;}}}return 0;
}

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

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

相关文章

完整教程:面向.NET开发者:Prosys OPC UA .NET SDK 全面解析

完整教程:面向.NET开发者:Prosys OPC UA .NET SDK 全面解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

分布式秒杀系统设计方案 - 实践

分布式秒杀系统设计方案 - 实践2025-10-14 19:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

高级程序语言第一次作业

这个作业属于哪个课程:高级语言程序设计 这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13558 学号:102500434 姓名:王志勇 一:dev-c++的安装:注意设置相关要求,安装正常。二:代码的…

安装devc++过程的分享以及问题的记录

课程:https://edu.cnblogs.com/campus/fzu/gjyycx 作业要求 https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13558 学号:102500330 姓名:黄明浩1.解压压缩文件,进行的还算顺利,将程序存放到了一个全英文目录…

Linux之线程池 - 指南

Linux之线程池 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

LlamaIndex检索调优实战:分块、HyDE、压缩等8个提效方法快速改善答案质量

分块策略、混合检索、重排序、HyDE、上下文压缩、元数据过滤、自适应k值——八个实用技巧快速改善检索质量 RAG系统答不准问题,本质上是检索精度的问题。LlamaIndex本身提供的调优空间还挺大,不用推翻重写就能把准确…

zlog1

一、python的基本语法 1.常见的数据类型:整数(int)【1,2,3】、浮点数(float)【1.1,1.2,1.3】、字符串(str)【abc, hello】、布尔值(bool)【0,1 (True=1,False=0)】、列表(list)【[1.2,3]】、元组(tuple)、字典(dic…

Spring Boot 3.x 制作 Starter 快速上手体验,通过实践理解自动装配原理

Spring Boot 3.x 制作 Starter 快速上手体验,通过实践理解自动装配原理2025-10-14 19:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: au…

动火作业风险早预警!AI + 热成像技术筑牢防火安全线

动火作业(焊接、切割、喷灯使用等)的安全管理,长期受限于技术瓶颈与监管盲区:人工巡检难实时判断动火点周边是否存在易燃物,更无法精准测量易燃物与动火点的安全距离;AI 视觉技术因无法识别物体材质,难以界定 “…

DBA | MySQL 数据库基础用户和信息权限管理实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

解题报告-P5664 [CSP-S2019] Emiya 家今天的饭

P5664 [CSP-S2019] Emiya 家今天的饭 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 \(n\) 种烹饪方法,且会使用 \(m\) 种主要食材做菜。为了方便叙述,我们对烹饪方法从 \(1 \sim n\) 编号,对主要食材从 \(1 \sim…

5G x 工业应用:探索德承工控机在5G工业应用中所扮演的关键角色 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年生态格宾网厂家推荐榜:格宾网石笼/格宾网护坡/格宾网挡墙/格宾网网箱厂家推荐,聚焦工程安全与生态保护,助力基建项目高效落地

随着国家基础设施建设持续推进、生态环保理念深度融入工程设计,以及基建项目对材料耐用性、适配性要求的不断提升,生态格宾网系统已从传统水利工程逐步拓展至公路边坡防护、市政河道治理、矿山生态修复等多个领域,2…

时序博弈算法荣获时间检验奖

某中心学者Rupak Majumdar因其2003年发表的时序博弈论文获得CONCUR时间检验奖。该研究提出了包含时间约束的并发双人博弈模型及其分析算法,现已成为信息物理系统形式化分析的标准方法。获奖成就 某中心学者Rupak Maju…

STM32主控芯片硬件设计总结

STM32主控芯片硬件设计总结 我记的有点过于多了。。。 因为想多学一点所以弄了这么多字的笔记,重要的会加粗标注的。晶振电路设计通常情况下,STM32芯片的原理图会使用两个晶振,而在进行晶振贴片时,由于晶振的体积比…

DeepSeek、LangGraph和Python融合LSTM、RF、XGBoost、LR多模型预测NFLX股票涨跌|附完整代码数据

全文链接:https://tecdat.cn/?p=44060原文出处:拓端数据部落公众号分析师:He Bai开篇:先解决你的股票预测痛点! 做股票分析总卡壳?传统方法抓不住股价的波动规律?模型跑出来准确率低,还不知道问题出在哪?别慌…

【论文复现上新】AAAI2025!北理工团队提出FBRT-YOLO:面向实时航拍图像更快更好的目标检测 |计算机视觉|目标检测

北理工团队在AAAI 2025的论文中提出了一种专为实时航拍图像检测而深度优化的新架构FBRT-YOLO。阅读原文,欢迎访问Lab4AI.cn官网~01 论文概述 论文名称: FBRT-YOLO: Faster and Better for Real-Time Aerial Image De…

亚马逊因暗黑模式订阅设计支付25亿美元和解金

亚马逊因在Prime订阅服务中使用欺骗性的"暗黑模式"设计被FTC起诉,最终支付25亿美元和解金。这些界面设计故意误导用户注册并设置复杂的取消流程,违反了《恢复在线购物者信心法案》。亚马逊支付25亿美元和解…

P6645 [CCO 2020] Interval Collection

考虑一个结论是,最多选择两个区间。 维护一个线段树,每个结点维护左端点右端点和答案,就像维护模拟费用流那样,合并的时候天然保证了相交部分最少。