luogu P2018 消息传递
二次联通门 : luogu P2018 消息传递
/*
luogu P2018 消息传递 树形dp
原来用优先队列做了一下, T了俩点
MMP 去看正解。。
复杂度一样好不好。。
每次到达一个点,记录其子树中所有的dp值
优先向大的一边转移
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring> #define INF 1e8
const int BUF = ;
char Buf[BUF], *buf = Buf; inline void read (int &now)
{
for (now = ; !isdigit (*buf); ++ buf);
for (; isdigit (*buf); now = now * + *buf - '', ++ buf);
} #define Max 1100 struct E
{
E *n;
int to;
};
E *list[Max], poor[Max << ], *Tail = poor;
int father[Max], dp[Max]; inline int max (int a, int b)
{
return a > b ? a : b;
}
inline int min (int a, int b)
{
return a < b ? a : b;
}
void Dp (int now, int Father)
{
int data[Max], C = ;
father[now] = Father;
for (E *e = list[now]; e; e = e->n)
if (e->to != Father)
{
Dp (e->to, now);
data[++ C] = dp[e->to];
}
std :: sort (data + , data + + C);
for (int i = ; i <= C; ++ i)
dp[now] = max (dp[now], data[i] + C - i + ); }
int Answer[Max]; int Main ()
{
fread (buf, , BUF, stdin); int Maxn = INF;
int N, M; read (N); register int i; int x;
for (i = ; i <= N; ++ i)
{
read (x);
++ Tail, Tail->to = i, Tail->n = list[x], list[x] = Tail;
++ Tail, Tail->to = x, Tail->n = list[i], list[i] = Tail;
}
for (i = ; i <= N; ++ i)
{
Dp (i, );
Answer[i] = dp[i];
Maxn = min (Maxn, Answer[i]);
memset (dp, , sizeof dp);
}
printf ("%d\n", Maxn + );
for (i = ; i <= N; ++ i)
if (Answer[i] == Maxn) printf ("%d ", i);
return ;
}
int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}
luogu P2018 消息传递的更多相关文章
- 洛谷P2018 消息传递
P2018 消息传递 题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的 ...
- 洛谷——P2018 消息传递
P2018 消息传递 题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的 ...
- 洛谷P2018消息传递
传送门啦 这个树形dp就没那么简单了,运用了一下贪心的思想 不同的排序方法对应着不同的转移方程,如果我们用 $ f[x] = max(f[x] , b[i] +cnt - i + 1) $ 来进行转移 ...
- P2018 消息传递[dp]
题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的上级,B也是A的上级. ...
- 洛谷 P2018 消息传递 题解
题面 总体来说是一道从下往上的DP+贪心: 设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间: 那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大..... 可 ...
- 洛谷 P2018 消息传递
题目分析 贪心+树形DP 本来还以为要大费周折地换根,然后发现 \(n\) 很小,可以直接 \(O(n^2\log n)\) 枚举. 枚举每个节点作为根,用 \(f_x\) 表示走完以 \(x\) 为 ...
- Android消息传递之基于RxJava实现一个EventBus - RxBus
前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...
- 使用Masstransit开发基于消息传递的分布式应用
Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用. 值得一提的是Masstran ...
随机推荐
- mac oxs 上查看进程监听的端口号 lsof
sudo netstat -ltnp |grep xxx lsof -p 26917 | grep LISTEN https://mengkang.net/1090.html
- SQL高级教程
一.top子句 top子句用于规定要返回的记录的数目 并非所有数据库系统都支持top子句 # sqlserver SELECT TOP number|percent column_name(s) FR ...
- ABP 基于DDD的.NET开发框架 学习(一)
ABP总体介绍 ABP是ASP.NET Boilerplate Project,ASP.NET样板项目. ABP框架定位于快速开发 ABP是一个用于最快实践和流行开发现代Web应用程序的新起点,旨在成 ...
- C# SpinLock用法。
class Program { static void Main(string[] args) { ; ]; Stopwatch sp = new Stopwatch(); sp.Start(); / ...
- idea 实用插件
尊重劳动成果,本插件的整理原文出自:https://blog.csdn.net/weixin_41846320/article/details/82697818,感谢老铁的辛苦原创. 插件安装方式: ...
- Eclipse workspace被锁定
重新打开Eclipse时,提示如下: Workspace Unavailable: Workspace in use or cannot be created, choose a different ...
- 【前端开发】nrm切换淘宝镜像&nvm管理node版本及切换
说明:nrm是切换淘宝镜像用的,nvm是node的版本切换用的(可在自己电脑安装多个版本node,便于不同项目的支持) 一.nrm的安装及常见命令: 安装nrmnpm install -g nrm 查 ...
- SQLSEVER在存储过程或触发器中模糊查询拼接
declare @name nvarchar(50); declare @name_pin nvarchar(50); set @name_pin = '%'+@name +'%' 模糊查询: sel ...
- hashmap,hashtable,concurrenthashmap多线程下的比较(持续更新)
1.hashMap 多线程下put会造成死循环,主要是扩容时transfer方法会造成死循环. http://blog.csdn.net/zhuqiuhui/article/details/51849 ...
- mycat-rule
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apac ...