[bzoj3829][Poi2014]FarmCraft_树形dp
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的更多相关文章
- BZOJ3829[Poi2014]FarmCraft——树形DP+贪心
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ...
- 【BZOJ3522】[Poi2014]Hotel 树形DP
[BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ...
- BZOJ3522[Poi2014]Hotel——树形DP
题目描述 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽 ...
- bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...
- 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)
[BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are houses connected ...
- 3522: [Poi2014]Hotel( 树形dp )
枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...
- [POI2014]FAR-FarmCraft 树形DP + 贪心思想
(感觉洛谷上题面那一小段中文根本看不懂啊,好多条件都没讲,直接就是安装也要一个时间啊,,,明明不止啊!还好有百度翻译......) 题意:一棵树,一开始在1号节点(root),边权都为1,每个点有点权 ...
- POI2014 FAR-FarmCraft 树形DP+贪心
题目链接 https://www.luogu.org/problem/P3574 题意 翻译其实已经很明确了 分析 这题一眼就是贪心啊,但贪心的方法要思索一下,首先是考虑先走时间多的子树,但不太现实, ...
- 【BZOJ3872】[Poi2014]Ant colony 树形DP+二分
[BZOJ3872][Poi2014]Ant colony Description 给定一棵有n个节点的树.在每个叶子节点,有g群蚂蚁要从外面进来,其中第i群有m[i]只蚂蚁.这些蚂蚁会相继进入树中, ...
随机推荐
- C 库函数 - strchr()
定义 char *strchr(const char *str, int c) 参数 str -- 要被检索的 C 字符串. c -- 在 str 中要搜索的字符 说明 该函数返回在字符串 str 中 ...
- python 链表的反转
code #!/usr/bin/python # -*- coding: utf- -*- class ListNode: def __init__(self,x): self.val=x self. ...
- 5.lock 锁
中断: 线程实例.interrupt(); lock锁的使用 package com.jlong; import java.util.concurrent.locks.Condition; imp ...
- Fluent当中的通配符【翻译】
本文翻译自fluent帮助手册 可以在TUI当中使用通配符指定特定区域的名称,一些例子如下: 通配符*等同于"所有区域"例如: -/display/boundary-grid * ...
- JavaWeb之Tomcat(1) —— Tomcat的目录结构
1. bin 文件夹 存放Tomcat的可执行文件 (1) startup.bat 文件,启动Tomcat服务的批处理文件. (2) shutdown.bat 文件,结束Tomcat服务的批处理文件. ...
- #C++初学记录(N皇后#回溯递归)
<font size=5 face"微软雅黑">N皇后Problem Description <font size=4 face"微软雅黑"& ...
- AOSP---"Android Open-Source Project"
定义 编辑 "Android Open-Source Project"的缩写 中文意为"Android 开放源代码项目" 内容 编辑 在Android Open ...
- 数据缺失值的处理 | R包 - mice
有些情况下缺失值会零星的分布在数据当中,这时去掉所有包含缺失值的样本就不行了,直接用0去填补缺失值也不行. 所以此时就应该用拟合的方法来填补缺失值. library(mice) init = mice ...
- mariadb galera群集故障记录
负责galera上执行删除语句 delete from t1 where group_id= and group_id=; 执行后,群集破坏,除了主节点存活,其他俩个节点全都停掉. 查看galera的 ...
- storcli64和smartctl定位硬盘的故障信息
storcli64可对LSIRAID卡基本操作进行管理,本文主要是对LSIRAID卡常使用到的命令进行介绍 https://www.cnblogs.com/wangl-blog/archive/201 ...