P3523 POI2011 DYN-Dynamite

小 trick,加双倍经验。

思路

使 \(dis\) 的最大值最小,可以想到二分 \(dis\),然后根据 \(dis\) 判断可行性。

那么可以把问题转化为,所有关键点到选择的点的距离小于 \(dis\) 的前提下,使得使用的点的个数最小。

这就是:P3942 将军令

考虑设 \(f[u]\) 为距离 \(u\) 最近的选中的点的距离,\(g[u]\) 为距离 \(u\) 最远的未被覆盖的关键点的距离。

这里覆盖指:对于一个关键点,到最近的被选中点的距离小于等于当前二分的 \(dis\)。

有朴素转移:

\[f[u]=\max(f[u],f[v]+1)\\
\]
\[g[u]=\max(g[u],g[v]+1)
\]

然后要分讨一下(下文中的 \(mid\) 为二分的距离):

  1. 当 \(f[u]>mid\) 且 \(u\) 为关键点。

    \(g[u]=max(g[u],0)\)。

    解释:显而易见,当前点可以作为一个没有被覆盖的关键点。

  2. 当 \(g[u]+f[u]\leq mid\)。​

    \(g[u]=-\infty\)。

    解释:显然没有一个没被覆盖的关键点,易证 \(g[u]\) 和 \(f[u]\) 不来自一棵子树。

  3. 当 \(g[u]=mid\)。

    \(g[u]=-\infty,f[u]=0\)​ 且需选择的点个数加一。

    解释:该点必须被选择。

最后判断一下根的 \(g[u]\) 是否大于 \(0\),如果大于 \(0\) 在加一个选中的点。

然后套上二分就 OK 了。

CODE

#include<bits/stdc++.h>
using namespace std; const int maxn=3e5+5; struct Edge
{
int tot;
int head[maxn];
struct edgenode{int to,nxt;}edge[maxn*2];
inline void add(int x,int y)
{
tot++;
edge[tot].to=y;
edge[tot].nxt=head[x];
head[x]=tot;
}
}T; int n,m;
int a[maxn]; int g[maxn],f[maxn]; int gs;
inline void dfs(int u,int fa,int mid)
{
g[u]=-1e9,f[u]=1e9;
for(int i=T.head[u];i;i=T.edge[i].nxt)
{
int v=T.edge[i].to;
if(v==fa) continue;
dfs(v,u,mid);
f[u]=min(f[v]+1,f[u]);
g[u]=max(g[v]+1,g[u]);
}
if(f[u]>mid&&a[u]) g[u]=max(g[u],0);
if(f[u]+g[u]<=mid) g[u]=-1e9;
if(g[u]==mid) f[u]=0,g[u]=-1e9,gs++;
}
inline void solve(int mid)
{
gs=0;
dfs(1,0,mid);
gs+=(g[1]>=0);
printf("%d",gs);
} int main()
{
int t;
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=n;i++) a[i]=1;
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
T.add(u,v),T.add(v,u);
}
solve(m);
}

P3523 POI2011 DYN-Dynamite的更多相关文章

  1. 10月清北学堂培训 Day 6

    今天是黄致焕老师的讲授~ T1 自信 AC 莫名 80 pts???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...

  2. 【BZOJ2525】[Poi2011]Dynamite 二分+树形DP

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...

  3. bzoj 2525 [Poi2011]Dynamite 二分+树形dp

    [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 270  Solved: 138[Submit][Status][D ...

  4. 【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...

  5. Bzoj 2525 [Poi2011]Dynamite

    2525: [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 240  Solved: 120[Submit][Sta ...

  6. BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心

    题目大意:给定一棵树,有一些点是关键点,要求选择不超过mm个点.使得全部关键点到近期的选择的点距离最大值最小 二分答案,问题转化为: 给定一棵树,有一些点是关键点,要求选择最少的点使得每一个关键点到选 ...

  7. BZOJ2525 [Poi2011]Dynamite 【二分 + 贪心】

    题目链接 BZOJ2525 题解 就是要求所有有炸弹的点到点燃点距离最大值最小 显然二分答案距离\(D\) 然后按深度排序,贪心点燃当前没覆盖的深度最深的点往上第\(D\)层的点 每覆盖一个点要标记其 ...

  8. bzoj 2525: [Poi2011]Dynamite【二分+树上贪心】

    一眼二分.然后重点是树上贪心部分 长得像dp一样,设mn为子树内已炸点的最浅点,mx为子树内没有炸并且需要炸的最深点,然后转移直接从子树继承即可 然后是判断当前u点是否需要炸,当mx[u]+mn[u] ...

  9. POI2011题解

    POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...

  10. BZOJ2527: [Poi2011]Meteors

    补一发题解.. 整体二分这个东西,一开始感觉复杂度不是很靠谱的样子 问了po姐姐,说套主定理硬干.. #include<bits/stdc++.h> #define ll long lon ...

随机推荐

  1. LeetCode300.最长递增子序列

    LeetCode300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除 ...

  2. due to missing onError handler in the subscribe() method call.

    某日,APP端忽然与后台,一建立连接,就报错,然后断开, 之前都好好的,十分确信代码没有问题,可是跑着就是报错,百思不得其解, 终于发现,不知道怎么回事,配置文件里的stomp的地址配的居然不是我印象 ...

  3. [Udemy] AWS Certified Data Analytics Specialty - 5.Visualization

    QuickSight SPICE是 QuickSight 的加速技术

  4. 【SpringBoot Demo】MySQL + JPA + Hibernate + Springboot + Maven Demo

    主要包含:springboot+jpa+hibernate+mysql+lombok (两年前写过一个,现在重新记录一个) 1. 目录结构: 2. pom 文件 1 <?xml version= ...

  5. verilog vscode 与AI 插件

    Verilog 轻量化开发环境 背景 笔者常用的开发环境 VIAVDO, 体积巨大,自带编辑器除了linting 能用,编辑器几乎不能用,仿真界面很友好,但是速度比较慢. Sublime Text, ...

  6. 不升级 POI 版本,如何生成符合新版标准的Excel 2007文件

    开心一刻 记得小时候,家里丢了钱,是我拿的,可爸妈却一口咬定是弟弟拿的 爸爸把弟弟打的遍体鳞伤,弟弟气愤的斜视着我 我不敢直视弟弟,目光转向爸爸说到:爸爸,你看他,好像还不服 问题描述 项目基于 PO ...

  7. RxJS 系列 – Custom Operator

    前言 虽然 RxJS 提供了非常多的 Operators. 但依然会有不够用的时候. 这时就可以自定义 Operator 了. Operator Is Just a Function Observab ...

  8. Servlet——Request对象-请求数据&请求参数

    Request 继承体系      1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中   2.使用request对象,查阅javaEE ...

  9. VMWARE 客户机 ARP 问题一则

    最近测试自定义的 linux 镜像,会在 vmware 里面反复安装.测试过程中,发现一个奇怪的现象,就是刚装好的虚拟机,要主动往外ping一下,才能被网络上其他主机连接上.否则就算是同一子网下的宿主 ...

  10. 聊聊 HTAP 的前世今生

    随着现代社会大型实时分析应用的逐渐流行,关系型数据库已经难以处理高并发的事务请求.商业层面上,当全球进入数字化时代,数字化技术渗透到各行各业,同时产生了海量数据,数据的存储和应用是企业决策的重要依据之 ...