[洛谷P3942] 将军令
洛谷题目链接:将军令
题目背景
历史/落在/赢家/之手
至少/我们/拥有/传说
谁说/败者/无法/不朽
拳头/只能/让人/低头
念头/却能/让人/抬头
抬头/去看/去爱/去追
你心中的梦
题目描述
又想起了四月。
如果不是省选,大家大概不会这么轻易地分道扬镳吧? 只见一个又一个昔日的队友离开了机房。
凭君莫话封侯事,一将功成万骨枯。
梦里,小 F 成了一个给将军送密信的信使。
现在,有两封关乎国家生死的密信需要送到前线大将军帐下,路途凶险,时间紧迫。小 F 不因为自己的祸福而避趋之,勇敢地承担了这个任务。
不过,小 F 实在是太粗心了,他一不小心把两封密信中的一封给弄掉了。
小 F 偷偷打开了剩下的那封密信。他 发现一副十分详细的地图,以及几句批文——原来 这是战场周围的情报地图。他仔细看后发现,在这张地图上标记了 n 个从 1 到 n 标号的 驿站,n − 1 条长度为 1 里的小道,每条小道双向连接两个不同的驿站,并且驿站之间可以 通过小道两两可达。
小 F 仔细辨认着上面的批注,突然明白了丢失的信的内容了。原来,每个驿站都可以驻 扎一个小队,每个小队可以控制距离不超过 k 里的驿站。如果有驿站没被控制,就容易产 生危险——因此这种情况应该完全避免。而那封丢失的密信里,就装着朝廷数学重臣留下的 精妙的排布方案,也就是用了最少的小队来控制所有驿站。
小 F 知道,如果能计算出最优方案的话,也许他就能够将功赎过,免于死罪。他找到了 你,你能帮帮他吗? 当然,小 F 在等待你的支援的过程中,也许已经从图上观察出了一些可能会比较有用的 性质,他会通过一种特殊的方式告诉你。
输入输出格式
输入格式:
从标准输入中读入数据。
输入第 1 行一个正整数 n,k,t,代表驿站数,一支小队能够控制的最远距离,以及特 殊性质所代表的编号。关于特殊性质请参照数据范围。
输入第 2 行至第 n 行,每行两个正整数 u_iui , v_ivi ,表示在 u_iui 和 v_ivi 间,有一条长度为 一里的小道。
输出格式:
输出到标准输出中。
输出一行,为最优方案下需要的小队数。
输入输出样例
输入样例#1:
4 1 0
1 2
1 3
1 4
输出样例#1:
1
输入样例#2:
6 1 0
1 2
1 3
1 4
4 5
4 6
输出样例#2:
2
说明
【样例 1 说明】
如图。由于一号节点到周围的点距离均是 1,因此可以控制所有驿站。
【样例 2 说明】
如图,和样例 1 类似。

子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解 决一部分测试数据。
关于 t 的含义如下: t = 0:该测试点没有额外的特殊性质; t = 1:保证最多 8 个点的所连接的小道超过 1 条; t = 2:保证所有点到 1 号点的距离不超过 2。
每个测试点的数据规模及特点如下表

题面完
简述一下题意:给出一颗\(n\)个节点的树,以及控制一个节点后能同时覆盖的长度\(k\).现在要求出最少可以用多少节点覆盖整张图.
题目给出的是一颗树,可以直接将无根树转有根树,同时记录深度.
既然要覆盖整颗树,并且每个节点的深度都已经知道了.并且要覆盖一颗子树上的所有节点,只需要覆盖这颗子树的根节点.那么显然为了覆盖到深度为\(dep\)最深的节点,至少需要覆盖深度为\(dep-k\)的节点.
于是我们考虑一个贪心策略:
每次考虑深度最深且未被控制的节点\(x\).控制\(x\)上方深度为\(dep-k\)的节点.
但是有没有什么好办法能快速找到\(x\)上方深度为\(dep-k\)的节点呢?
我们可以直接从\(x\)开始扩展,扩展的距离为\(k*2\),那么这样得到的结果和从\(x\)上方深度为\(dep-k\)的节点开始扩展距离为\(k*2\)所得到的结果就是一样的了.
另外注意一下,如果直接对所有节点sort排序的话,数组的下标就会改变,要用结构体存下每个节点原来所代表的节点.
#include<bits/stdc++.h>
using namespace std;
const int N=100000+5;
int n, k, p, cnt = 0, last[N], ans = 0;
bool con[N], vis[N];
struct node{
int dep, id;
}t[N];
struct edge{
int to, nex;
}e[N*2];
int gi(){
int ans = 0, f = 1; char i = getchar();
while(i<'0'||i>'9'){if(i=='-')f=-1;i=getchar();}
while(i>='0'&&i<='9'){ans=ans*10+i-'0';i=getchar();}
return ans * f;
}
void add(int x,int y){
e[++cnt].to = y;
e[cnt].nex = last[x];
last[x] = cnt;
}
bool cmp(node a,node b){
return a.dep > b.dep;
}
void build(int x,int dep){
vis[x] = 1; t[x].dep = dep;
for(int i=last[x];i;i=e[i].nex){
int to = e[i].to;
if(!vis[to]) build(to,dep+1);
}
}
void dfs(int x,int size){
vis[x] = con[x] = 1;
for(int i=last[x];i;i=e[i].nex){
int to = e[i].to;
if(!vis[to] && size > 0)
dfs(to , size-1);
}
vis[x] = 0;
}
int main(){
int x, y; n = gi(); k = gi(); p = gi();
for(int i=1;i<n;i++){
x = gi(); y = gi();
add(x,y); add(y,x);
}
for(int i=1;i<=n;i++) t[i].id = i;
build(1,1); sort(t+1 , t+n+1 , cmp);
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
if(!con[t[i].id])
ans++, dfs(t[i].id,k*2);
printf("%d\n",ans);
return 0;
}
[洛谷P3942] 将军令的更多相关文章
- 洛谷 P3942 将军令 解题报告
P3942 将军令 题目描述 又想起了四月. 如果不是省选,大家大概不会这么轻易地分道扬镳吧? 只见一个又一个昔日的队友离开了机房. 凭君莫话封侯事,一将功成万骨枯. 梦里,小\(F\)成了一个给将军 ...
- 洛谷P3942将军令
啦啦啦,又是五月天的歌------ 题目传送门 那么来分析下题目;给定你一棵树,告诉你一支队伍能管辖的范围,求能覆盖整棵树的最少队伍数. 嘛,如果不会做,第一个想到的肯定是暴搜嘛,但是代码打起来肯定也 ...
- [洛谷P3942]:将军令(贪心)
题目传送门 题目背景 历史/落在/赢家/之手至少/我们/拥有/传说谁说/败者/无法/不朽拳头/只能/让人/低头念头/却能/让人/抬头抬头/去看/去爱/去追你心中的梦 题目描述 又想起了四月.如果不是省 ...
- 洛谷P3941入阵曲
题目传送门 这道题也是今年湖南集训队Day8的第一题,昨天洛谷的公开赛上又考了一遍,来发个记录(其实是因为五月天,另外两道题分别是将军令和星空,出这次题目的人肯定同为五迷(✪㉨✪)) 话不多说.先理解 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- ReentrantLock类的hasQueuedPredecessors方法和head节点的含义
部分启发来源自文章:Java并发编程--Lock PART 1 1.如果h==t成立,h和t均为null或是同一个具体的节点,无后继节点,返回false.2.如果h!=t成立,head.next是否为 ...
- Tapestry 权威讲解-备份
http://blog.csdn.net/mindhawk/article/details/5021371#introduction
- PHP 头像上传
嘻嘻,自从圣诞节过后,就一直懒散,这几天也因为是太过于繁忙的原因,感觉好久都没有出来冒冒泡,诶... 为了生活一直在奋斗,作为一名前端开发工程师,我现在越来越迷茫了,都不知道现在自己到底算什么了? 会 ...
- EntityFramewrok 使用
1.使用一些查询比较复杂或者需要拼接的查询的时候最好一直保持IQueryable.一直到最后取数据的时候才进行查询.例如分页之类的条件拼接. var query = dbset.Where(expre ...
- C++学习012友元
何为友元,我的理解,友元就是把另一个类当作是我的朋友,朋友之间,是可以访问一些私有的变量的. 所以,当我们将一个累声明为自己的友元类的时候,那么这个类就可以访问我们自己类中的某些私有变量等 当我把某个 ...
- LightGBM的算法介绍
LightGBM算法的特别之处 自从微软推出了LightGBM,其在工业界表现的越来越好,很多比赛的Top选手也掏出LightGBM上分.所以,本文介绍下LightGBM的特别之处. LightGBM ...
- node + npm 命令
npm install npm@latest -g //更新npm npm -v //运行查看版本号 地址:https://docs.npmjs.com/getting-started/insta ...
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...
- Redis的高级应用——数据安全
Redis的数据保存在内存中,速度十分快.这也就意味着,一个恶意破解redis数据库密码的用户,可以在一秒钟进行更多的尝试.如果用户密码级别较低或更换频率过长,就会造成致命的危害. 1.设置用户 Re ...
- SQL select 和SQL where语句
一.SQL SELECT语句 用于从表中选取数据,结果被存储在一共结果表中(称为结果集) 1.语法: SELECT 列名称 FROM 表名称 以及: SELECT * FROM 表名称 注:SQ ...