51Nod 1378 夹克老爷的愤怒

Description

一棵树,可以进行染色,被染色的点可以控制与它距离不超过 \(k\) 的所有点,问控制整棵树最少需要染几个点.

Sol

贪心.

记录一下最深的未染色点和最浅的染色点,判断一下能否在子树中就完成,不能的话就把权值赋成最深未染色点深度+1,能的话就赋成染色点深度+1.

需要特判一下根.

Code

#include<cstdio>
#include<vector>
#include<ctime>
#include<cstdlib>
#include<iostream>
using namespace std;

const int N = 100005;

int n,k,ans;
int f[N];
vector<int> g[N];

inline int in(int x=0,char ch=getchar()){ while(ch>‘9‘ || ch<‘0‘) ch=getchar();
	while(ch>=‘0‘ && ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar();return x; }
void DFS(int u,int fa){
	int mx=0,mi=0;
	for(int i=0,v;i<g[u].size();i++) if((v=g[u][i])!=fa){
		DFS(v,u);
		mx=max(mx,f[v]),mi=min(mi,f[v]);
	}
	if(mx+1 > k) f[u]=-k,ans++;
	else if(mx+mi+1>0) f[u]=mx+1;
	else f[u]=mi+1;
}
int main(){
	n=in(),k=in();
	for(int i=1,u,v;i<n;i++) u=in()+1,v=in()+1,g[u].push_back(v),g[v].push_back(u);
	DFS(1,-1);
	if(f[1]>0) ans++;
	cout<<ans<<endl;
	return 0;
}

  

时间: 2024-10-16 15:52:30

51Nod 1378 夹克老爷的愤怒的相关文章

[51nod] 1378 夹克老爷的愤怒 #树形DP

1378 夹克老爷的愤怒 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 夹克老爷逢三抽一之后,由于采用了新师爷的策略,乡民们叫苦不堪,开始组织起来暴力抗租. 夹克老爷很愤怒,他决定派家丁常驻村中进行镇压. 诺德县 有N个村庄,编号0 至 N-1,这些村庄之间用N - 1条道路连接起来. 家丁都是经过系统训练的暴力机器,每名家丁可以被派驻在一个村庄,并镇压当前村庄以及距离该村庄不超过K段道路的村庄. 夹克老爷一贯奉行最小成本最大利润的原则,请问要实现对全部村庄

51nod 1378 夹克老爷的愤怒(树形DP+贪心)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1378 大致题意: 一棵1e5节点的树,安放某些位置,一个位置可以控制距他的距离不超过K的所有节点, 输入树和K,求控制全图(所有节点)需要安放最少的个数 思路: 假如是线性结构,一定是从边界开始每距离2k安放一个,然后最后正好或者再放置一个,这个贪心思路所有人都会. 当是树形结构时,仍然用那个贪心,显然安放的位置越靠近根节点控制的其他节点数越多,所以这里必须从

51nod 1378 夹克老爷的愤怒(树型dp+贪心)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1378 题意: 思路:要想放得少,尽量放在叶子节点处,叶子节点处点比较多. 从叶子节点开始往上回溯,到第k个点时就放置一名家丁,用dp[x]来记录状态,若为负,则表示该节点及其子树所需要家丁的最远距离,若为正,则表示该节点及其子树中家丁还能镇压的最大距离. 1 #include<cstdio> 2 #include<cstring> 3 #include&l

51nod 1380 夹克老爷的逢三抽一 堆 脑洞题

51nod 1380 夹克老爷的逢三抽一堆 脑洞题 题意 n个人围成一圈 然后每次可以选一个人,得到他的分数,然后他与他相邻的两个人出圈 总共选 n/3次, 保证n是3的倍数 题解 这道怎么说呢,应该比较巧妙吧,你开一个优先队列,大根堆,每次选择优先队列中最大的数,然后把他左右两个数删掉,比如 A B C 删掉 B ,那么就把 A+C-B 加入优先队列中,这其实就是相当于提供了一个后悔的机会,就像网络流中的反向边,如果在选中这个点的话,就相当于 B+(A+C-B) 然后就相当于 B 这个点 不选

51Nod 1380 夹克老爷的逢三抽一

Description 一开始有一个环,可以选择删除一个元素获得他的权值,同时删除与它相邻的两个元素,其他元素重新形成环,问能获得的最大价值. Sol 堆+贪心. 一开始从堆中加入所有元素,然后取出一个元素之后,加入他两边的元素之和-该位置的权值,并把左右两点删除. 一直到取出 \(\frac {n} {3}\) 个元素即可,左右元素可以用链表维护. 这样取出一个元素了以后可以进行反悔的操作,获得另外两个权值. xyx大爷说只要不相邻那么元素个数使得他必然有一种合法的删除方案. Code #in

【51nod 1785】数据流中的算法

Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度. 现有的统计工具只能统计某一个窗口中,用户的满意程度的均值.夹克老爷想让你为统计工具添加一个新feature,即在统计均值的同时,计算窗口中满意程度的标准差和中位数(均值需要向下取整). Input 第一行是整数n与k,代表有n次操作,时间窗口大小为k.  (1 <= n <= 10^6, 1 <= k <= 100) 接下来的n行,每行

51Nod - 1786 数据流中的算法 - 众数

1786 数据流中的算法 - 众数 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 数据流统计功能上线后,为51nod提升用户体验做出了很大的贡献.但是新问题随之而来,夹克老爷还想知道在一个窗口内,访问次数最多用户(即窗口内的众数).如果有多个众数,取用户ID最小的一个.(窗口的意思是一个固定长度的区间!) (因为数据流是实时的.在线的,所以不允许使用离线算法^_^) Input 第一行为整数n, k.(1 <= n <= 5 * 10^6,1 <

51nod1625 夹克爷发红包(贪心+dfs)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 在公司年会上,做为互联网巨头51nod掌门人的夹克老爷当然不会放过任何发红包的机会. 现场有n排m列观众,夹克老爷会为每一名观众送出普通现金红包,每个红包内金额随机. 接下来,夹克老爷又送出最多k组高级红包,每组高级红包会同时给一排或一列的人派发 ,每个高级红包的金额皆为x. 派发高级红包时,普通红包将会强制收回.同时,每个人只能得到一个高级红包.(好小

51nod1785数据流中的算法

51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度. 现有的统计工具只能统计某一个窗口中,用户的满意程度的均值.夹克老爷想让你为统计工具添加一个新feature,即在统计均值的同时,计算窗口中满意程度的标准差和中位数. Input 第一行是整数n与k,代表有n次操作,时间窗口大小为k.  (1 <= n <= 10^6, 1 <= k <= 100) 接下来的n行,每行代表一次操作.操作有“用户访问”.“查询均值