摘要: 题面 总体来说是一道从下往上的DP+贪心; 设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间; 那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大..... 可以证明,这样的答案一定是最优的; 然后f[i]=max(f[i],f[j]+cnt); 总的时间复杂 阅读全文
posted @ 2019-11-06 20:11 神之右大臣 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题面 对于每个点,我们可以用一次dfs求出这个点到以这个点为字树的最远距离和次远距离; 然后用换根法再来一遍dfs求出这个点到除这个点子树之外的最远距离; 显然的,每次的询问我们可以用向上的最大值加向下的最大值得到; 具体换根法的实现可以看下面的代码~; #include <bits/stdc++. 阅读全文
posted @ 2019-11-06 17:29 神之右大臣 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题面 10%的数据,n ≤ 100, k = 0,w = 0。直接输出即可。(就是个完全匹配) 10%的数据,n ≤ 10, k≤ 20, 0 ≤ w ≤ 500。O(n!)枚举。(就是搜索啊~) 10%的数据,n≤ 15,k ≤ 20, 0 ≤ w ≤ 500。状压,fi,j表示处理了左边前i个点 阅读全文
posted @ 2019-11-06 17:15 神之右大臣 阅读(140) 评论(0) 推荐(0) 编辑