P3942 将军令

梦里,小 F 成了一个给将军送密信的信使。

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

不过,小 F 实在是太粗心了,他一不小心把两封密信中的一封给弄掉了。

小 F 偷偷打开了剩下的那封密信。他 发现一副十分详细的地图,以及几句批文——原来 这是战场周围的情报地图。他仔细看后发现,在这张地图上标记了 n 个从 1 到 n 标号的 驿站,n − 1 条长度为 1 里的小道,每条小道双向连接两个不同的驿站,并且驿站之间可以 通过小道两两可达。

小 F 仔细辨认着上面的批注,突然明白了丢失的信的内容了。原来,每个驿站都可以驻 扎一个小队,每个小队可以控制距离不超过 k 里的驿站。如果有驿站没被控制,就容易产 生危险——因此这种情况应该完全避免。而那封丢失的密信里,就装着朝廷数学重臣留下的 精妙的排布方案,也就是用了最少的小队来控制所有驿站。

小 F 知道,如果能计算出最优方案的话,也许他就能够将功赎过,免于死罪。他找到了 你,你能帮帮他吗? 当然,小 F 在等待你的支援的过程中,也许已经从图上观察出了一些可能会比较有用的 性质,他会通过一种特殊的方式告诉你。

Solution

很早做的题, 那时没博客

今天做了类似的, 貌似数据有点问题。。

好的这题可以贪心

我们从深度大的节点开始, 可以发现在深度与这个节点差 \(\leq k\) 的节点驻扎, 此点可以被控制

那么当然染最远那个点优, 可以够得到上面一点的点

于是从深度大的开始, 若没被染色则上访到最远处, 染色, 顺便将能染得都染了

顺便累计答案即可

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 1000019,INF = 1e9;
int head[maxn],nume = 1;
struct Node{
int v,dis,nxt;
}E[maxn << 3];
void add(int u,int v,int dis){
E[++nume].nxt = head[u];
E[nume].v = v;
E[nume].dis = dis;
head[u] = nume;
}
int num,k;
int fa[maxn];
struct T{
int index,dep;
}I[maxn];
bool cmp(T a,T b){return a.dep > b.dep;}
bool vis[maxn];
int dep[maxn];
void dfs1(int u,int F){
for(int i = head[u];i;i = E[i].nxt){
int v = E[i].v;
if(v == F)continue;
I[v].dep = dep[v] = I[u].dep + 1;
dfs1(v,u);
}
}
bool used[maxn];
void dfs2(int u,int left){
vis[u] = 1;
used[u] = 1;
for(int i = head[u];i;i = E[i].nxt){
int v = E[i].v;
if(!used[v] && left > 0)dfs2(v,left - 1);
}
used[u] = 0;
}
int col;
void find(int u,int left){
col = u;
if(left == 0)return ;
for(int i = head[u];i;i = E[i].nxt){
int v = E[i].v;
if(dep[v] > dep[u])continue;
find(v,left - 1);
}
}
int ans;
void check(){
for(int i = 1;i <= num;i++){
if(!vis[I[i].index]){
ans++;
find(I[i].index,k);
dfs2(col,k);
}
}
printf("%d\n",ans);
}
int main(){
num = RD();k = RD();RD();
for(int i = 1;i <= num - 1;i++){
int u = RD(),v = RD();
add(u,v,1);add(v,u,1);
I[i].index = i;//这里和输入路径无关
}
I[num].index = num;
I[1].dep = dep[1] = 1;
dfs1(1,-1);
sort(I + 1,I + 1 + num,cmp);
check();
return 0;
}

P3942 将军令的更多相关文章

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

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

  2. [洛谷P3942] 将军令

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

  3. 洛谷P3942将军令

    啦啦啦,又是五月天的歌------ 题目传送门 那么来分析下题目;给定你一棵树,告诉你一支队伍能管辖的范围,求能覆盖整棵树的最少队伍数. 嘛,如果不会做,第一个想到的肯定是暴搜嘛,但是代码打起来肯定也 ...

  4. [洛谷P3942]:将军令(贪心)

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

  5. Luogu P3942 将军令

    题目 维护每个点子树中最深的没有被覆盖的点(仅计算这条链上的关键点)的距离. 若\(u\)为关键点,则\(d_u=-k-1\). 记录\(mx=\max\limits_{v\in son_u}d_v+ ...

  6. 题解 P3942 将军令

    题解 首先看到这题 \(k=1\) 时,就是一道 小胖守皇宫,那么由 \(k=1\) 联想到 \(k=2...20\) 发现可以树形 \(DP\) 但转移方程太难想,不太适合考场做. 考虑贪心: 对所 ...

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

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

  8. 洛谷 题解 P3942 【将军令】

    本题算法:贪心+排序+搜索+并查集+图论 输入中的t可以不用管,毕竟这只是特殊情况的标志 题目中虽然没有很明确地说明这是一棵树,但是题目中说有n个点,但是只有n-1条边,想用这n-1条边把整个图连通起 ...

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

随机推荐

  1. OO的第一次死亡

    久仰OO大名,总是想着提前做点准备,其实到头来还是什么准备都没有做,所以这学期就是从零开始的面向对象生活,也因此遇到了很多的问题. 第一次作业——多项式加减 第一次作业历来是较为简单的,但是对于面向对 ...

  2. SpringMVC 常用注释

    @Controller  Controller控制器是通过服务接口定义的提供访问应用程序的一种行为 @Repository  Dao层的标志 @RequestMapping  标注控制层函数的访问路径 ...

  3. Runtime 类的使用

    package com.System.Runtime; import java.io.IOException; /* RunTime 该类类主要代表了应用程序运行的环境. getRuntime() 返 ...

  4. 2017 Summary

    几门课 基础电路与电子学 知道了一些二极管三极管的基本基本很基本的那种物理知识吧,但是毕竟我是从电信转专业过来的,所以说我内心就是逃避模电这样的课的.上课基本没听,后面只是死命复习了一周,考的还可以. ...

  5. BETA-1

    前言 我们居然又冲刺了·一 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 发现之前的代码居然已经有了陌生感,默默地复习一遍并做注释 阅读关于基于视频的车 ...

  6. vue 如何使用scss (转载)

    创建一个基于 webpack 模板的新项目 全局安装 vue-cli $ npm install --global vue-cli 创建一个基于 webpack 模板的新项目 $ vue init w ...

  7. js ajax 1

    var xmlHttpReq = null; //声明一个空对象用来装入XMLHttpRequest if (window.ActiveXObject){//IE5 IE6是以ActiveXObjec ...

  8. SQLSERVER STANDARD 版本不支持内存数据库

    1. 自己负责的一个环境 安装了 SQLSERVER2014 的 标准版 发现有问题. 恢复了一个带内存数据库的性能测试库之后报错. 报错信息很不明了,但是 查了半天发现必须升级企业版才可以... 还 ...

  9. Best Time to Buy and Sell Stock IV

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  10. poj 3254(状态压缩DP)

    poj  3254(状态压缩DP) 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相 ...