题面

​ 题目的意思大概是给你一棵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)嘛...

​ 这样的话, 复杂度就是:

\[O(nk)
\]

​ 多好啊......

具体代码

#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] 将军令的更多相关文章

  1. luogu3942将军令

    https://www.zybuluo.com/ysner/note/1302132 题面 在大小为\(n\)的树上选择尽量少的点,使得所有未选择的点距离选择了的点小于等于\(k\). \(n\leq ...

  2. luogu3942 将军令 贪心

    题目大意:给你一个地图(树),共有1~n个驿站(点),编号分别为1~n,告诉你第ui个驿站与第vi个驿站有一条长度为1的路(边),每个小队(可以放在任意驿站上)最多有k的覆盖长度,问最多要放置多少个小 ...

  3. 洛谷 P3942 将军令 解题报告

    P3942 将军令 题目描述 又想起了四月. 如果不是省选,大家大概不会这么轻易地分道扬镳吧? 只见一个又一个昔日的队友离开了机房. 凭君莫话封侯事,一将功成万骨枯. 梦里,小\(F\)成了一个给将军 ...

  4. P3942 将军令

    P3942 将军令 梦里,小 F 成了一个给将军送密信的信使. 现在,有两封关乎国家生死的密信需要送到前线大将军帐下,路途凶险,时间紧迫.小 F 不因为自己的祸福而避趋之,勇敢地承担了这个任务. 不过 ...

  5. [洛谷P3942] 将军令

    洛谷题目链接:将军令 题目背景 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 题目描述 又 ...

  6. 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) ...

  7. 【题解】将军令 Luogu P3942 (未完成)

    历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 将军令 题目描述 又想起了四月. 如果不是省 ...

  8. NOIP模拟测试17「入阵曲&#183;将军令&#183;星空」

    入阵曲 题解 应用了一种美妙移项思想, 我们先考虑在一维上的做法 维护前缀和$(sum[r]-sum[l-1])\%k==0$可以转化为 $sum[r]\% k==sum[l-1]\%k$开个桶维护一 ...

  9. noip模拟10[入阵曲·将军令·星空](luogu)

    对于这次考试来说,总体考得还是不错的 就是有一个小问题,特判一定要判对,要不然和不判一样,甚至错了还会挂掉30分 还有一个就是时间分配问题,总是在前几个题上浪费太多时间,导致最后一个题完全没有时间思考 ...

随机推荐

  1. MYSQL与MSSQL对比学习

    最近在将公司的一个产品里面相关的MSSQL语句修改为可以在MYSQL上执行的语句 l  优点分析: MYSQL短小精悍,容易上手,操作简单,免费供用的.相对其它数据库有特色又实用的语法多一些.SQL怎 ...

  2. js小练习

    1.题目:某班的成绩出来了,现在老师要把班级的成绩打印出来. 效果如下:xxx年xx月x日  星期x--班级总分为:81 格式要求:1.显示打印的日期.格式为类似“xxxx年xx月xx日 星期x”的当 ...

  3. Vue 基本指令和html常用标签结合使用综合案例(含代码)

    最近项目中要开发一个OA审批:里边涉及到流程跳转(流程较多),具体方案有:直接下一步,选择参与人或者选择某一个流程之后再选择参与人: 我们前端是APiCloud开发,这里我主要使用Vue来实现,把实现 ...

  4. 浅谈一致性哈希(My转)

    一致性哈希(Consistent hashing)算法是由 MIT 的Karger 等人与1997年在一篇学术论文(<Consistent hashing and random trees: d ...

  5. 关于HSTS的总结

    访问http网站,和服务器交互的步骤浏览器向服务器发起一次HTTP请求服务器返回一个重定向地址浏览器在发送一次HTTPS请求,得到最终内容 上面浏览器发送http请求后容易被拦截,使用HSTS后可以避 ...

  6. FineReport中树数据集如何实现组织树报表

    组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集——树数据集,只需要简单的设置就能自动递归出层级,方 ...

  7. 解决PJA错误

     现场有WAS5.6,均安装在AIX下,且都已经设置PJA,在WAS5上报表正常,但是在WAS6下报表会报错,两个应用下的配置均相同. 反馈的报错日志: [11-4-25 14:20:42:758 ...

  8. node (1)

    一.介绍 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端. 但Node似乎有点不同: ● Node.js不是一种独立的语言,与PHP. ...

  9. wmware中网络设置技巧

    wmware中网络的三种方式: .............................................. (1)桥接模式: 将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信. 默认 ...

  10. 【转】stropts.h: No such file or directory – How to Fix

    原文地址:stropts.h: No such file or directory – How to Fix 作者:xjc2694 It is a known issue that modern Li ...