[bzoj3829][Poi2014]FarmCraft_树形dp

时间:2023-01-06 21:02:36

FarmCraft

题目链接https://lydsy.com/JudgeOnline/problem.php?id=3829

数据范围:略。


题解

因为每条边只能必须走两次,所以我们的路径一定是进入了一棵子树然后出来,不可能再进去。

我们根据这个性质,设计出状态$f_i$表示以$i$为根的子树答案即可。

转移时,我们发现需要对儿子进行一个排序,我们就暴力的判断一下哪个儿子在前面更优即可。

代码

#include <bits/stdc++.h>

#define N 1000010 

using namespace std;

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )

int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
} int head[N], to[N << 1], nxt[N << 1], tot; inline void add(int x, int y) {
to[ ++ tot] = y;
nxt[tot] = head[x];
head[x] = tot;
} int sz[N]; void dfs(int p, int fa) {
sz[p] = 1;
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa) {
dfs(to[i], p);
sz[p] += sz[to[i]];
}
}
} int t[N], f[N]; struct Node {
int val, id;
}q[N]; // inline bool cmp(const Node &a, const Node &b) {
// return a.val < b.val;
// } inline bool cmp(const Node &a, const Node &b) {
return max(a.val, sz[a.id] * 2 + b.val) < max(b.val, sz[b.id] * 2 + a.val);
} void dfs1(int p, int fa) {
f[p] = t[p];
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa) {
dfs1(to[i], p);
}
}
int cnt = 0;
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa) {
q[ ++ cnt] = (Node) {f[to[i]], to[i]};
}
}
sort(q + 1, q + cnt + 1, cmp);
int sum = 0;
for (int i = 1; i <= cnt; i ++ ) {
f[p] = max(f[p], f[q[i].id] + sum + 1);
sum += sz[q[i].id] * 2;
}
} int main() {
int n = rd();
// int m = t[1];
for (int i = 1; i <= n; i ++ ) {
t[i] = rd();
}
// t[1] = 0;
for (int i = 1; i < n; i ++ ) {
int x = rd(), y = rd();
add(x, y), add(y, x);
}
dfs(1, 1);
dfs1(1, 1);
// for (int i = 1; i <= n; i ++ ) {
// printf("%d ", f[i]);
// }
// puts("");
cout << max(f[1], (n - 1) * 2 + t[1]) << endl ;
return 0;
}

[bzoj3829][Poi2014]FarmCraft_树形dp的更多相关文章

  1. BZOJ3829&lbrack;Poi2014&rsqb;FarmCraft——树形DP&plus;贪心

    题目描述 In a village called Byteville, there are   houses connected with N-1 roads. For each pair of ho ...

  2. 【BZOJ3522】&lbrack;Poi2014&rsqb;Hotel 树形DP

    [BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ...

  3. BZOJ3522&lbrack;Poi2014&rsqb;Hotel——树形DP

    题目描述 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽 ...

  4. bzoj 3829&colon; &lbrack;Poi2014&rsqb;FarmCraft 树形dp&plus;贪心

    题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...

  5. 【BZOJ3829】&lbrack;Poi2014&rsqb;FarmCraft 树形DP(贪心)

    [BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are   houses connected ...

  6. 3522&colon; &lbrack;Poi2014&rsqb;Hotel&lpar; 树形dp &rpar;

    枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...

  7. &lbrack;POI2014&rsqb;FAR-FarmCraft 树形DP &plus; 贪心思想

    (感觉洛谷上题面那一小段中文根本看不懂啊,好多条件都没讲,直接就是安装也要一个时间啊,,,明明不止啊!还好有百度翻译......) 题意:一棵树,一开始在1号节点(root),边权都为1,每个点有点权 ...

  8. POI2014 FAR-FarmCraft 树形DP&plus;贪心

    题目链接 https://www.luogu.org/problem/P3574 题意 翻译其实已经很明确了 分析 这题一眼就是贪心啊,但贪心的方法要思索一下,首先是考虑先走时间多的子树,但不太现实, ...

  9. 【BZOJ3872】&lbrack;Poi2014&rsqb;Ant colony 树形DP&plus;二分

    [BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...

随机推荐

  1. Aix项目&lowbar;shell&lowbar;rsh&lowbar;01

    rsh(remote shell) 功能说明:远端登入Shell. 语 法:rsh [-dn][-l <用户名称>][主机名称或IP地址][执行指令] 补充说明:rsh提供用户环境,也就是 ...

  2. dictionary &lpar;key-value&rpar; &lpar;map容器&rpar;

    #dictionary可以保存不同类型的值 menu = {'fish0':14.50} list = [] menu['fish1'] = 10.1 # Adding new key-value p ...

  3. 有向图和拓扑排序Java实现

    package practice; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Stack; pu ...

  4. Git安装配置和提交本地代码至Github,修改GitHub上显示的项目语言

    1. 下载安装git Windows版Git下载地址: https://gitforwindows.org/ 安装没有特别要求可以一路Next即可,安装完成后可以看到: 2. 创建本地代码仓库 打开G ...

  5. Python&lowbar;list部分功能介绍

    x.append():在列表尾部添加一个元素 x.clear():把列表清空 x.count():判断某个元素出现的次数 x.extend():合并两个列表,或者一个元组 x.index():获取元素 ...

  6. Springboot 2&period;0&period;4 整合Mybatis出现异常Property &&num;39&semi;sqlSessionFactory&&num;39&semi; or &&num;39&semi;sqlSessionTemplate&&num;39&semi; are required

    在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...

  7. URL与URI的含义及区别

    1.1 什么是URI? 简单点说:URI就是通用资源标志符,不理解是吧,我第一次听说也是不理解. 进一步说:网络上的一些资源(文档.图片.音频.视频.程序等)都是有一些通用资源标识(Universal ...

  8. 撸&period;NET Core的正确姿势

    特点 案例基于刚发布的.NET Core 2.1 只需一台Linux服务器搞定一切, 全程无需自己配置dotnet环境, 需要熟悉git docker基础知识可有可无, 过了下面几个步骤,你就已经入门 ...

  9. 如何使用 t-sql 更新数据库中日期字段的部分数据(年?月?日?时?分?秒?)

    嗯,从网上找到了一些内容,综合利用了sql server的一些内置方法 首先是 convert 方法:https://msdn.microsoft.com/zh-cn/library/ms187928 ...

  10. 验证手机号码的JS方法

    function Checkreg() { //验证电话号码手机号码,包含153,159号段 if (document.form.phone.value=="" &&amp ...