题解:P8127 [BalticOI 2021] The Xana coup (Day2)

news/2025/11/11 22:12:05/文章来源:https://www.cnblogs.com/CharlieCai/p/19211756

考虑以 \(1\) 为根进行树形 dp,定义 \(f_{x,0/1,0/1}\) 表示以 \(x\) 为根子树内除了 \(x\) 外都已变为 \(0\)\(x\) 的点权为 \(0/1\)(对应第一个 \(0/1\)),\(x\) 父亲的点权会不会反转(对应第二个 \(0/1\))。不合法状态设为 \(+\infty\)

首先,对于叶子节点,显然有 \(f_{x,a_x,0}=0,f_{x,a_x\oplus1,1}=1\)

考虑转移,设 \(g_{i,0}\) 表示考虑 \(x\) 的前 \(i\) 个儿子全是点权为 \(0\),对 \(x\) 的反转次数和为偶数,\(g_{i,1}\) 表示考虑 \(x\) 的前 \(i\) 个儿子全是点权为 \(0\),对 \(x\) 的反转次数和为奇数。显然 \(g_{0,0}=0,g_{0,1}=+\infty\)

再设 \(h_{i,0}\) 表示考虑 \(x\) 的前 \(i\) 个儿子全是点权为 \(1\),对 \(x\) 的反转次数和为偶数,\(h_{i,1}\) 表示考虑 \(x\) 的前 \(i\) 个儿子全是点权为 \(1\),对 \(x\) 的反转次数和为奇数。显然 \(h_{0,0}=0,h_{0,1}=+\infty\)

显然,对于 \(x\) 的儿子 \(y\),上述这四个状态的转移有:

  • \(g_{i,0}=\min(g_{i-1,0}+f_{y,0,0},g_{i-1,1}+f_{y,0,1})\)

  • \(g_{i,1}=\min(g_{i-1,0}+f_{y,0,1},g_{i-1,1}+f_{y,0,0})\)

  • \(h_{i,0}=\min(h_{i-1,0}+f_{y,1,0},h_{i-1,1}+f_{y,1,1})\)

  • \(h_{i,1}=\min(h_{i-1,0}+f_{y,1,1},h_{i-1,1}+f_{y,1,0})\)

\(x\) 的儿子数量为 \(son_x\),则有

  • 不在当前点进行操作,\(x\) 没被反转,即 \(f_{x,a_x,0}=g_{son_x,0}\)

  • 不在当前点进行操作,\(x\) 被反转,即 \(f_{x,a_x\oplus1,0}=g_{son_x,1}\)

  • 在当前点进行操作,\(x\) 没被反转,即 \(f_{x,a_x,1}=h_{son_x,1}+1\)

  • 在当前点进行操作,\(x\) 被反转,即 \(f_{x,a_x\oplus1,1}=h_{son_x,0}+1\)

直接转移即可,最后答案为 \(\min(f_{1,0,0},f_{1,0,1})\)

#include<bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
const int inf=1e12;
int n,a[MAXN],f[MAXN][2][2];
int head[MAXN],cnt;
struct Edge{int value,next;
}edge[MAXN*2];
void addedge(int u,int v){edge[++cnt].value=v;edge[cnt].next=head[u];head[u]=cnt;
}
void dfs(int x,int fa){bool flag=0;int ga=0,gb=inf,ha=0,hb=inf;for(int i=head[x];i;i=edge[i].next){int y=edge[i].value;if(y!=fa){dfs(y,x);flag=1;int tga=min(ga+f[y][0][0],gb+f[y][0][1]);int tgb=min(ga+f[y][0][1],gb+f[y][0][0]);int tha=min(ha+f[y][1][0],hb+f[y][1][1]);int thb=min(ha+f[y][1][1],hb+f[y][1][0]);ga=tga,gb=tgb,ha=tha,hb=thb;}}if(!flag){f[x][a[x]][0]=0;f[x][a[x]^1][1]=1;}else{f[x][a[x]][0]=ga;f[x][a[x]^1][0]=gb;f[x][a[x]][1]=hb+1;f[x][a[x]^1][1]=ha+1;}
}
signed main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);scanf("%lld",&n);for(int i=1;i<n;i++){int u,v;scanf("%lld%lld",&u,&v);addedge(u,v),addedge(v,u);}for(int i=1;i<=n;i++)scanf("%lld",&a[i]),f[i][0][0]=f[i][0][1]=f[i][1][0]=f[i][1][1]=inf;dfs(1,0);int ans=min(f[1][0][0],f[1][0][1]);if(ans<inf)printf("%lld\n",ans);else printf("impossible\n");return 0;
}

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

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

相关文章

2025年EGUOO肠胃片深度解析:科学复配视角下的胃肠健康新答案

本文从“科学复配”维度切入,为读者提供一份可验证、可对照、可回溯的客观参考,避免空泛赞誉,也拒绝情绪贬损,仅把实验数据、法规文件、市场反馈与成分逻辑摆到台面,供有消化困扰或膳食补充需求的人群自行权衡。 …

2025年河南工业大学2025新生周赛(3)

A 直播间红包雨抢券赛 根据规则,若某方领取到陷阱红包则直接判输,因此核心目标是避免领取第 k 个红包,即谁能迫使对方领取第 k 个红包,谁就获胜。这等价于争夺 “领取到第 k-1 个红包” 的控制权 —— 若能确保自己…

指数生成函数

指数生成函数用来解决 多重集排列问题问题 有 \(n\) 种物品,每种物品有 \(a_i\) 个,问取 \(m\) 个的排列数 这个排列数的写法可以写为 \(\frac{m!}{b_1!b_2!b_3!...b_n!}\) \(b_i\) 表示第 \(i\) 种物品选 \(b_i\) 个…

基于SpringBoot+Vue的线上一流课程教学辅助系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】 - 指南

基于SpringBoot+Vue的线上一流课程教学辅助系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

Tarjan の 套餐

本套餐包含材料来源于洛谷题单:【图论】Tarjan 入门 给几碟配菜: 参考文章1 参考文章2 参考文章3 参考文章4 大部分都是板子题嘻嘻嘻嘻 SCC强连通分量 定义 极大的强连通子图,即对于该子图,任意的两点之间均有路径…

日总结 25

HTML5 是 W3C 2014 年标准化的 HTML 第五个正式版本,在 HTML4 基础上升级,新增语义化标签、原生多媒体(视频 / 音频)、本地存储、增强型表单、图形绘制(canvas/SVG)及丰富 API 等核心特性,支持跨平台自适应,推…

类 类型转化(运用子类的方法)

类 类型转化(运用子类的方法)stu父类 public class stu {public void say(){System.out.println("stu");} }teacher子类 public class teacher extends stu{public void go(){System.out.println("te…

postman: 用HTTPBasicAuth的方式发送账号密码

一,使用HTTPBasicAuth的方式发送用户名密码 发送账号和密码的方式有很多,这里我们用HTTPBasicAuth的方式,HTTPBasicAuth规定了发送账号密码必须要把账号和密码放到HTTP的header里面。header是一组一组key:value的键…

2025 ICPC 南京区域赛游记

Day -20 ~ 从上赛季打完之后,我对这个赛季的期望一直是能够靠自己拿一块真正的银牌。 西安拿铜之后难受了好几天,主要是因为自己的发挥非常不正常。 去南京之前解决了一下自己堆积成山的 ddl。第五周和第七周连着做了…

详细介绍:Kuikly 小白拆解系列 第1篇|两棵树直调(Kotlin 构建与原生承载)

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

编程思维与 AI-coding 结合

前言(背景与目标) 最近大量使用 AI 协助完成项目,直观感受是:个人“编码时间”减少,但“完成效率与质量”显著提升。与其担心编程能力下降,不如承认一个事实——角色在升级:从“只写代码的工程师”转向“以目标…

重大收获的一天

重大收获的一天,今天我知道了,JAVA-WEB也是要分文件处理的.可以分为JSP(展示页面),servlet(接受请求,调用业务方法,跳转页面),services(业务逻辑),DAO(与数据库有关的操作), :定义段落,前后会有空白. 仅换行,不添加空白…

如何制作一个随身服务器?

需要在两处办公地点不定时、不定点办公,两边都需要处理文档和查找历史文档,从文档同步角度来说,需要的是:一旦插入U盘,自动更新电脑文件与U盘一致。 要实现这个功能,需要使用FreeFileSync和自带的RealTimeSync工…

业务用例模板(用户线上充值) - f

业务用例模板 一、用例基本信息字段 内容(示例) 填写说明用例名称 用户线上充值 动宾结构,简洁明确用例编号 UC-用户模块-003 模块+序号,便于归类管理参与者 普通用户、支付系统、账户系统 所有与用例交互的角色/系…

丝路杯

这是一个对丝路杯的总结,主要是awd攻防。从这次比赛中找到不足。(之后有补充的话会继续补充) 这次的check很抽象,检测你有没有修改后门文件,修改了,直接异常,只能删除后门文件(无异常)。而且对通防没有限制,…

CTF 流量分析- Wireshark 核心教程:从网卡抓包到 2025 - CTF 流量分析题目技巧

CTF 流量分析- Wireshark 核心教程:从网卡抓包到 2025 - CTF 流量分析题目技巧本文聚焦 Wireshark 的 “操作流程 + 流量筛选”,为网络分析提供实用参考。基础操作环节明确步骤:从网卡列表中选择需监控的网卡启动抓…

关于做过的第一道实验题的思考

> 回忆那是我大一做的第一道实验题 题目内容如下Input:三个int范围内的数字要求:将三个数字从小到大排序后输出...... 或许谈回忆有些太早,毕竟从做这题到现在也就过了短短两个月,但在我逐步学习编程知识的过程…

#20232329 2025-2026-1 《网络与系统攻防技术》 实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息。 (2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。 (3)使用nmap开源…

CF round vp 选记

CF2163 D2. Diadrash (Hard Version)有一个隐藏的 \(0\) 到 \(n-1\) 的排列,初始给定 \(n\) 和 \(q\) 个区间 \([l_i,r_i]\),你可以至多询问 \(30\) 次每次查询排列的一个区间的 \(\mathrm{mex}\),用来找到这 \(q\)…