本文出自 http://blog.csdn.net/shuangde800
题意
给一棵n个结点的树,任意两个节点的距离是指连接两点的最短的边数
在树上的某个结点有一个“恶魔之书”,这本书会让距离它d以内的节点都受到影响
已知有m个节点收到了影响,问最多有几个结点可能放着“恶魔之书”?
思路
要判断某个点是不是放着书,就要判断这个点的周围d距离以内是否包含所有受影响的m节点
而如果某个节点距离最远的那个受影响节点的距离是L,如果L <= d,那么说明所有受影响的m节点都在d以内,就可判断这个点可能放着书
那么,我们只要能够求出每个节点距离最远的影响节点是多少,就可以O(n)的时间求出答案了。
所以可以用树形dp求解:
f(u, 0): 表示u为顶点的子树中,距u最远的“受影响节点”的距离
f(u, 1): 表示整个树删去u为顶点的子树,但是依旧保留u点为顶点,这个树中距离u最远的“受影响节点”的距离
所有的f(u, 0)可以一次dfs搞定, O(n)
f(u, 1)可以由顶节点一直推下去
f(v, 1) = max{f[brother1][0], f[brother2][0]..., f[brother3][0], f[father][1] | brother是v的兄弟节点,fa是v的父节点} + 1
这一步可以再一次dfs解决,同样是O(n)
代码
<script src="https://code.csdn.net/snippets/614.js" type="text/javascript"></script>
分享到:
相关推荐
Codeforces Round #723 (Div. 2).md
Codeforces - 1107B. Digital root & 1107C. Brutality(规律 & 贪心)Codeforces - 1107B.
上面代码跑出来的dp[n][m]是0,然后从(1,1)(1,2)(2,2)(2,3)这样的相与值是k (看懂ans+k是啥应该就懂了) 代码: int main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); int ans=(1&...
Educational Codeforces Round 157D. XOR Construction
Codeforces - 1131C. Birthday(贪心)题目链接题目给你n和n个数,要你重新排列n个数,使得这些数的相邻差值中最大的那个值最小。stat
每步只能跳d 在1——n每个位置有方向,L,R,求d的最小值 思路: 只用找相邻两个R之间的最大值即可 代码: #include #include #include #include #include #include #include #include #include #include #define ...
就是把所有相等的数放到一个vector里,如果他出现大于2次,看最远的间距是否大于2即可,找到一个就可以 代码: #include #include #include #include #include #include #include #include #include #include #...
长度为n的字符串包含n−2n−2n−2个aaa和222个bbb,求按照字典序排列输出第kkk个字符串 解题思路 第一个bbb在倒数第二位有1个字符串,在倒数第三位有2个字符串…在倒数第nnn位时有n−1n-1n−1个字符串 可以根据第一...
E. Cyclic Components 题目链接-E. Cyclic Components 题目大意 给你nnn个点和mmm条边,求所构成图中单圈环的个数 ...并查集并查集并查集 很明显单圈环每个点的度都为222,所以我们可以用数组cnt[]记录每个点的度,...
今天CF被D恶心到了,写个题解重新整理下思路,(20开始想,25写完暴力代码,1.30才过,优化后的。。 核心思路就是在暴力的基础上进行组合数等差加速。 C(n-2,i-1)*C(j-1,n-2)*(i-1) __ j: n-1 -> m 我们发现内层...
传送门 题意: The pair of topics
Codeforces Round #629 (Div. 3) E.Tree Queries (DFS) 思路:若ai 在路径上 ,则ai的父结点一定在路径上,若ai是路径上某个结点的子结点,则ai的父结点一定在路径上,综上只需考虑ai的父节点就行了。对每个ai判断...
回头重新看了一下题意,这不就是求最长链的树形dp裸题吗? 代码如下: #include #define ll long long #define inf 0x3f3f3f3f #define mod 1000000007 #define PI acos(-1) #define fi first #define se second #...
解决问题的方法教育Codeforces回合101 - 2/6 常规托架顺序-接受红色和蓝色-接受Codeforces回合#686(Div.3) 2/6 特殊排列-接受唯一出价拍卖-接受序列转换-接受编号成序列-接受Codeforces回合#685(分区2) 2/7 减...
传说门 刚好今晚是中国场! 其实这道题比较水,但当时思路错,一心想着化简公式,浪费了好多时间a....#pragma GCC optimize(2) #include #define ll long long #define endl '\n' using namespace std; const int manx=
Codeforces部门2,A # And a2oj Ladder 4 some problems Ladder URL:http://a2oj.com/Ladder.jsp?ID=4难度等级:2问题提示: 1- 4A. Watermelon: http://codeforces.com/problemset/problem/4/A 2- 71A. Way Too ...
给你一棵树,求所有任意两节点相连的路以外的路上的数字的最小值最小 思路 构造 若一个点连了三条边及以上,则这个点的边从最小值开始赋值。其他边从最大点开始赋值。 证明:一个点连了三条边及以上,那么任取uv所在...
比赛项目源码