题面

总体来说是一道从下往上的DP+贪心;

设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间;

那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大.....

可以证明,这样的答案一定是最优的;

然后f[i]=max(f[i],f[j]+cnt);

总的时间复杂度是O(n^2logn),可过;

但是还可以进一步优化(窝太懒了所以没写)

换根法,可以一遍dfs(nlogn)就求出所有的答案;

#include <bits/stdc++.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int head[2010],cnt;
class littlestar{
public:
int to,nxt;
void add(int u,int v){
to=v; nxt=head[u];
head[u]=cnt;
}
}star[4010];
int n;
int f[2010];
class node{
public:
int value,pos;
};
vector<node> vec[2010];
bool cmp(node x,node y)
{
return x.value>y.value;
}
void dfs(int u,int fa)
{
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(v==fa) continue;
dfs(v,u);
vec[u].push_back((node){f[v],v});
}
sort(vec[u].begin(),vec[u].end(),cmp);
inc(j,0,(int)vec[u].size()-1){
int v=vec[u][j].pos;
f[u]=max(f[u],f[v]+j+1);
}
}
int tmp[2010];
int main()
{
scanf("%d",&n);
inc(i,2,n){
int tmp; scanf("%d",&tmp);
star[++cnt].add(tmp,i);
star[++cnt].add(i,tmp);
}
int minn=INT_MAX;
inc(i,1,n){
memset(f,0,sizeof(f));
inc(j,1,n) vec[j].clear();
dfs(i,0);
if(f[i]<minn){
tmp[0]=0;
tmp[++tmp[0]]=i;
minn=f[i];
}
else if(f[i]==minn){
tmp[++tmp[0]]=i;
}
}
printf("%d\n",minn+1);
inc(i,1,tmp[0]){
printf("%d ",tmp[i]);
}
}
/*
8
1
1
3
4
4
4
3
*/

洛谷 P2018 消息传递 题解的更多相关文章

  1. 洛谷P2018 消息传递

    P2018 消息传递 题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的 ...

  2. 洛谷——P2018 消息传递

    P2018 消息传递 题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的 ...

  3. 洛谷P2018消息传递

    传送门啦 这个树形dp就没那么简单了,运用了一下贪心的思想 不同的排序方法对应着不同的转移方程,如果我们用 $ f[x] = max(f[x] , b[i] +cnt - i + 1) $ 来进行转移 ...

  4. 洛谷 P2018 消息传递

    题目分析 贪心+树形DP 本来还以为要大费周折地换根,然后发现 \(n\) 很小,可以直接 \(O(n^2\log n)\) 枚举. 枚举每个节点作为根,用 \(f_x\) 表示走完以 \(x\) 为 ...

  5. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  6. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  7. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  8. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

  9. [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解

    原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...

随机推荐

  1. 查看API工具 https://editor.swagger.io/

    The base URL for the API is:    https://api.cloud.nalantis.com/api/ The OpenAPI documentation is ava ...

  2. Django-缓存问题无法创建表

    新启的项目,应用不叫app01,也没有userinfo表: 由于缓存原因不能model里创建表报错: 解决办法: 删除init外的所有文件

  3. Linux安装elasticsearch5全过程(踩坑实录)

    Linux版本Centos elasticsearch版本:5.5 1.下载elasticsearch https://artifacts.elastic.co/downloads/elasticse ...

  4. Leetcode题目39.组合总和(回溯+剪枝-中等)

    题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无 ...

  5. mybatis用Map<Long,List<String>>作为参数

    mapper.xml文件里的<insert id="insertByMap" parameterType="java.util.Map"> inse ...

  6. mysql的启动问题

    用cmd启动MySQL   (net start mysql )时出现(发生系统错误 5.  拒绝访问)这样的错误是因为cmd 权限太低了需要提高cmd权限才行(即使管理员权限) 如下图cmd所示: ...

  7. 慎用String.intern()作为synchronized的对象锁

    https://www.cnblogs.com/yhlx/p/3498387.html

  8. hibernate关联映射之多对多

    package loaderman.c_many2many; import java.util.HashSet; import java.util.Set; /** * 开发人员 * * */ pub ...

  9. PhoneUtils

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class PhoneUtils { /** * @par ...

  10. "挡位"还是"档位",究竟谁错了

    http://baijiahao.baidu.com/s?id=1581395663965196858&wfr=spider&for=pc 对于“挡”与“档”两个字,我一直并没有给以太 ...