树形dp [POI 2013] LUK-Triumphal arch

波兰人神秘题目。

题意

\(n\) 点的树,初始节点 1 为黑色,其余白色。

两个人在博弈。

B 一开始位于 1 点,进行如下的回合。

首先每轮 A 选择 K 个点,然后 B 选择一个相邻的节点进行移动。

若任意时刻 B 位于白色的节点则 B 获胜。

若 A 将点全染黑 A 胜利。

求最小的 K 使得 A 可以获胜。

\(N\) 是 1e5 级别的。

做法

我上来就写了一个贪心,后来想想是假的,这里不提了,反正得分还挺高。

这个 K 明显有单调性,所以二分 K,尝试转换为一个判断问题。

先说结论,B 不可以走回头路。

因为 A 自然会堵死每一个 B 到过的节点,这并没有任何意义,相当于多给了 A 一次染色的机会,完全是愚蠢的。

所以 B 只能一条路走到黑。

A 每一次首先肯定是要先染自己所有的子节点,如果不够就需要之前的剩余进行弥补。

发现这个过程实际上是在合并所有子树的所需,加上自身的所需向上传(虽然可能是负数就对了)。

进而我们考虑树形 dp。

我们设 dp[u] 表示 u 子树所需要的之前的染色次数的总量。

son[u] 表示 u 的子节点数量。

不难得出 \(dp[u]=son[u]-k+\sum_{v是u子节点}^{}max(dp[v],0)\)

注意这里需要取 max, 我一开始并没有考虑到,因为子树的次数是不可能向上贡献的。

我们只需要检查 dp[1]<=0 就行的。

时间复杂度 \(O(nlogn)\),二分的值域和 n 一样,不做区分了。

代码如下

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MN=1e6+116;
struct Node{int nxt, to;
}node[MN];
int head[MN], tottt;
void insert(int u, int v){node[++tottt].to=v;node[tottt].nxt=head[u];head[u]=tottt; return;
}
int n, son[MN], dp[MN], ans;
void Read(){cin>>n;for(int i=1,u,v; i<n; ++i){cin>>u>>v; insert(u,v); insert(v,u);}
}
void Pre_dfs(int u, int father){for(int i=head[u];i;i=node[i].nxt){int v=node[i].to;if(v==father) continue;son[u]++; Pre_dfs(v,u);}
}
void dfs(int u, int father, int k){dp[u]=son[u]-k;for(int i=head[u];i;i=node[i].nxt){int v=node[i].to;if(v==father) continue;dfs(v,u,k);dp[u]+=max(dp[v],0);}
}
bool judge(int k){for(int i=1; i<=n; ++i) dp[i]=0;dfs(1,1,k); return dp[1]<=0;
}
void binary(){int l=0, r=3000001; ans=3000001;while(l<=r){int mid=(l+r)>>1;if(judge(mid)){ans=mid; r=mid-1;}else{l=mid+1;}}
}
void print(){cout<<ans<<'\n';
}
void solve(){Read(); Pre_dfs(1,1);binary(); print();
}
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);solve();return 0;
}

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

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

相关文章

【论术】t-design tree组件判断点击了角标还是label

用以精确校准是否点击了节点本身还是仅仅展开// 树的点击事件 const handleTreeClick = (params) => {const event = params.e;const labelElement = event.target.closest(".t-tree__label");// 判断是角…

Redis基础篇——集成客户端 - 实践

Redis基础篇——集成客户端 - 实践2025-09-29 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

leetCode刷题记录1

近来在反思自己的技能树,为找工作做准备。从大一的C语言、C++,到大二的Java、Python,甚至还没学的大三C#——编程语言学了一堆,但每一门都只够应付考试,没一个能算熟练掌握。技术框架也接触了不少,SpringBoot、V…

【Bluedroid】A2DP Source 音频流暂停流程解析[5]:停止流程及资源管理机制(btif_a2dp_source_stop_audio_req) - 教程

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

冷饮网站开发背景意义网页界面布局

https://www.processon.com/view/link/60b9cd711efad420f6d868a8

完整教程:分布式之抢购

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

k8s下部署kuboard

环境: OS:Centos 71.下载yaml文件[root@master kuboard]# cd /root/my_yaml/kuboard[root@master kuboard]# wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml2.部署[root@master kuboard]# cd /root/my_…

湘潭市哪里做网站大型网站开发价格

原文链接&#xff1a;http://blog.csdn.net/dev_csdn/article/details/78424803 ------------------------------------------------------------------- Docker是开发人员和系统管理员构建&#xff0c;发布和运行分布式应用程序的开放平台&#xff0c;可以在笔记本电脑、数据…

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

网站建设与实现毕业答辩ppt免费素材图片下载

哈喽大家好&#xff0c;我是咸鱼 在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sed sed 全名叫 stream editor&#xff0c;流编辑器&#xff0c;用程序的方式来编辑文本 那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事 sed 让文件属性变了&#xff…

双创网站建设百度做的网站字体侵权吗

什么是类加载器&#xff1f; 类加载器&#xff1a;JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而Java 程序能够启动起来。 类加载器有哪些&#xff1f; 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库…

echarts4升级为echarts5的常见问题

series下 label 下是没有 textStyle 属性 [ECharts] DEPRECATED: textStyle hierarchy in label has been removed since 4.0. All textStyle properties are configured in label directly now. [ECharts]已弃用:标签…

全球网站域名后缀商城公众号开发

今天遇到一个比较奇怪的问题&#xff0c;PA30能查到员工主数据&#xff0c;任何信息类型也没有错误&#xff0c;但是核算工资的时候发现无法找到此人。 但是核算工资无法核算 断点到逻辑数据get pernr&#xff0c;也不会进入断点 查看0000数据有间隔 具体错误的代码位置如下&am…

OpenCV2-图像基本操作-阈值与平滑处理-形态学-梯度运算 - 实践

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

百科网站开发wordpress用户注册后台

回数是指从左到右读和从右到左读都是一样的数&#xff0c;请利用filter()滤掉非回数(打印出1000内所有回数) def is_palindrome(n): return str(n)str(n)[::-1] # str(n)[::-1]代表字符串从后往前读&#xff0c;也代表字符串的翻转 output filter(is_palindrome,range(1,10…

怎样做个人网站宜昌哪里有做网站的

这是我关于使用Spring Boot和Project Reactor有效处理SQS消息的博客文章的后续文章 我在第一部分中列出了一些方法上的差距。 1.处理SQS客户端调用中的失败 2.该方法一次只能处理来自SQS的一条消息&#xff0c;如何并行化 3.它不处理错误&#xff0c;管道中的任何错误都会中…

ISO 周计算 记录

java不太熟悉但.需要java版的.一开始写的是javascript.此处只记录个思路1 import java.time.LocalDate;2 import java.time.temporal.ChronoUnit;3 import java.time.temporal.WeekFields; 4 5 public class tmain {6 …

网站服务器如何做热备价建设通网站公路查询

1. 图像色彩空间 图像色彩空间是用于定义颜色范围的数学模型。 它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围&#xff0c;因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。…

实用指南:RabbitMQ 在 Windows 环境下启动失败的完整解决方案

实用指南:RabbitMQ 在 Windows 环境下启动失败的完整解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

浙江网站建设而网络注册平台怎么注册

jms 如何测试对于我去过的大多数客户端&#xff0c;使用ActiveMQ扩展JMS消息传递层是一个优先事项。 有多种方法可以实现这一目标&#xff0c;但毫无疑问&#xff0c;创建基准并分析实际硬件上的体系结构&#xff08;或者正如我的同事Gary Tully所说的“询问机器”&#xff09;…