题面

总体来说是一道从下往上的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. MySQL初识数据库

    为什要用数据库 第一,将文件和程序存在一台机器上是很不合理的. 第二,操作文件是一件很麻烦的事 你可以理解为 数据库 是一个可以在一台机器上独立工作的,并且可以给我们提供高效.便捷的方式对数据进行增删 ...

  2. [vim]多行注释和多行删除

    vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率. 1.多行注释: 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 在行首使用上下键 ...

  3. ACM之路(16)—— 数位DP

    题目就是kuangbin的数位DP. 先讲C题,不要62,差不多就是一个模板题.要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值 ...

  4. DOM操作的性能优化

    DOM操作的真正问题在于 每次操作都会出发布局的改变.DOM树的修改和渲染. React解决了大面积的DOM操作的性能问题,实现了一个虚拟DOM,即virtual DOM,这个我们一条条讲. 所以关于 ...

  5. SpringMVC和AJAX交互

    在实际开发中我们经常需要前后台交互,那么springmvc与ajax之间交互这里记录下在实际开发中遇到的细节问题. jsp页面: <fieldset id="login" s ...

  6. How to get full path of StreamWriter

     How to get full path of StreamWriter   In my version of the framework, this seems to work: string f ...

  7. window10 安装.net framework 2.0插件

    1 背景 电脑升级到window10操作系统之后,在使用过程中安装某些软件(如 BI publisher)需要用到.net framework 2.0/3.5 框架. 例如:直接安装BI publis ...

  8. 魔法方法 __slots__ 方法

    场景解析 网游的用户, 大量的用户本质都是类的实例化对象, 在线人数百万级时对内存是很大的挑战, 如何减少这部分的内存 方法解析 __slots__ 方法 取消默认的类实例中的  __dict__  ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_6-05 高级篇幅之高并发情况下

    笔记 5.高级篇幅之高并发情况下接口限流特技         简介:谷歌guava框架介绍,网关限流使用 1.nginx层限流 2.网关层限流 开始 mysql最大的连接数就是3千多.如果想把应用搞好 ...

  10. Markdown 入门基础

    MarkDown基础语法 标题 通过 # 来实现标题效果.在markdown当中,标题与html相似,一共有六级标题. # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### ...