[luogu3942] 将军令
题面
题目的意思大概是给你一棵n个点的树, 求最少需要多少个多少个点, 整棵树都被覆盖(覆盖的意思是所有离被选中的点距离不大于k的点都视作已覆盖).
考虑贪心(其实我考试的时候以为是道树形dp, 虽然说树形dp也是一种可行的方法, 但是估计全网应该没有一篇是这么做的...), 观察到最深的点, 若当前节点没有被覆盖, 则可以选择他的k级祖先, 因为选择<k级的祖先必然没有选择k级的祖先更优(单调不升), 如果没有k级父亲, 就选择根节点. 根据bfs序的倒序(从更深的点向更浅的点扫描), 一个个检查该节点是否被控制, 如果没有, 就去选择它的k级父亲, 接下来引用题解PPT中的一句话:我们令点i离最近的被驻扎的点的距离是d[i], 我们令f[i] = max(-1, k - d[i]). 选择的时候, 若周围的点的f[i]有变化, 就直接暴力更新周围点的状态, 大不了就是O(n)嘛...
这样的话, 复杂度就是:
\]
多好啊......
具体代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define N 100005
#define itn int
using namespace std;
int n, K, t, head[N], stack[N], fa[N], cnt, top, f[N], ans;
struct node
{
itn to, next;
} edge[N << 1];
inline int read()
{
int x = 0, w = 1;
char c = getchar();
while(c < '0' || c > '9') { if (c == '-') w = -1; c = getchar(); }
while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
return x * w;
}
inline void add(int u, int v) { edge[++cnt].to = v; edge[cnt].next = head[u]; head[u] = cnt; }
inline void bfs()
{
queue<int> q;
q.push(1); stack[++top] = 1;
while(!q.empty())
{
int u = q.front(); q.pop();
for(int i = head[u]; i; i = edge[i].next)
{
int v = edge[i].to; if(v == fa[u]) continue;
fa[v] = u; stack[++top] = v; q.push(v);
}
}
}
inline void down(int u)
{
if(!f[u]) return;
for(int i = head[u]; i; i = edge[i].next)
{
int v = edge[i].to;
if(f[v] < f[u] - 1) { f[v] = f[u] - 1; down(v); }
}
}
int main()
{
freopen("general.in", "r", stdin);
freopen("general.out", "w", stdout);
n = read(); K = read(); t = read();
for(int i = 1; i < n; i++)
{
int u = read(), v = read();
add(u, v); add(v, u);
}
if(K == 0) { printf("%d\n", n); return 0; }
bfs();
memset(f, -1, sizeof(f));
for(int i = n; i >= 1; i--)
{
if(f[stack[i]] == -1)
{
ans++;
int j = stack[i];
for(int k = K; k; k--) j = fa[j];
f[j] = K;
down(j);
}
}
printf("%d\n", ans);
return 0;
}
实在是有问题就在下面说吧, 反正我也基本上不会回答...
完
[luogu3942] 将军令的更多相关文章
- luogu3942将军令
https://www.zybuluo.com/ysner/note/1302132 题面 在大小为\(n\)的树上选择尽量少的点,使得所有未选择的点距离选择了的点小于等于\(k\). \(n\leq ...
- luogu3942 将军令 贪心
题目大意:给你一个地图(树),共有1~n个驿站(点),编号分别为1~n,告诉你第ui个驿站与第vi个驿站有一条长度为1的路(边),每个小队(可以放在任意驿站上)最多有k的覆盖长度,问最多要放置多少个小 ...
- 洛谷 P3942 将军令 解题报告
P3942 将军令 题目描述 又想起了四月. 如果不是省选,大家大概不会这么轻易地分道扬镳吧? 只见一个又一个昔日的队友离开了机房. 凭君莫话封侯事,一将功成万骨枯. 梦里,小\(F\)成了一个给将军 ...
- P3942 将军令
P3942 将军令 梦里,小 F 成了一个给将军送密信的信使. 现在,有两封关乎国家生死的密信需要送到前线大将军帐下,路途凶险,时间紧迫.小 F 不因为自己的祸福而避趋之,勇敢地承担了这个任务. 不过 ...
- [洛谷P3942] 将军令
洛谷题目链接:将军令 题目背景 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 题目描述 又 ...
- 8.11 NOIP模拟测试17 入阵曲+将军令+星空
T1 入阵曲 前缀和维护可以得60分 f[x1][y1][x2][y2]=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]; O(n4) ...
- 【题解】将军令 Luogu P3942 (未完成)
历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 将军令 题目描述 又想起了四月. 如果不是省 ...
- NOIP模拟测试17「入阵曲·将军令·星空」
入阵曲 题解 应用了一种美妙移项思想, 我们先考虑在一维上的做法 维护前缀和$(sum[r]-sum[l-1])\%k==0$可以转化为 $sum[r]\% k==sum[l-1]\%k$开个桶维护一 ...
- noip模拟10[入阵曲·将军令·星空](luogu)
对于这次考试来说,总体考得还是不错的 就是有一个小问题,特判一定要判对,要不然和不判一样,甚至错了还会挂掉30分 还有一个就是时间分配问题,总是在前几个题上浪费太多时间,导致最后一个题完全没有时间思考 ...
随机推荐
- Java Singleton(单例模式) 实现详解
什么是单例模式? Intend:Ensure a class only has one instance, and provide a global point of access to it. 目标 ...
- mongodb常用的查询命令例子
取 time 字段的最大值: db.getCollection('CallLog').find().sort({"time":-1}).limit(1) 最小值只需要把 –1 改成 ...
- Java向数据库中一次性插入大量数据
String sql = “insert into username.tablename(id) values(?)”; PreparedStatement stmt = conn.prepareSt ...
- 以local模式使用Xshell+Xmanager远程监控jvisualvm
使用jvisualvm的remote方式监控服务器端jvisualvm时,不是很方便,因此通过local方式,应该是正路. 一.服务器端(Linux,最小安装模式,没有图形界面) 1.安装xauth ...
- BitmapFactory.Options
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inSampleSiz ...
- ecloipse背景修改豆沙
Eclipse背景色的修改 Eclipse背景色的修改,修改为豆沙色 值是85 123 205 一.修改编辑区 ①这个比较简单一般都会不多说. 1.首先点击Window 然后选择Preferen ...
- 跨域调用报表展现页面的flash打印方法
环境说明: 项目的应用和润乾的报表应用分别部署在同一机器不同的web服务器上(IP相同,端口不同,项目的端口8080,报表应用的端口是6868). 在项目中的父页面通过iframe调用报表展现页 ...
- java变量常量
1. java 变量遵循先声明,再赋值,后使用的原则. 一个变量可以只声明,不赋值,没有问题(只是这个变量没有实际意义,但完全没有问题).但如果想要使用它,那么就一定要给它赋值,而大多数时候我们又不知 ...
- maven 编译打包时,明明类文件没有问题,却提示错误:未结束的字符串字面值,maven-compiler-plugin:2.3.2
maven错误提示如下: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (de ...
- 深入浅出React的一些细节——State
(来源于: https://facebook.github.io/react/docs/state-and-lifecycle.html 翻译by:@TimRChen) Using State Cor ...