0827考试 T1
Description
有一棵树,每个点有一个权值,找到一个权值最大的"乙烷"模型。
"乙烷"模型是指:

其中黑点表示可以有0个或多个点。
Sample Input
8
1 1 1 1 1 1 1 1 //点权
1 2 //建树
1 3
1 4
1 5
2 6
2 7
2 8
Sample Output
8
看到这道题有点蒙,想了一会儿想出是树形DP了,就是不会写,就想着打个暴力,还没打对。。。(我吐了)
这道题正解就是树形DP,我们考虑它的状态是什么。

(我们cjh学长的画功真是太厉害了!)
0代表一个点,1代表一条链,2代表两条链...
那转移呢?

\(x\)代表父亲节点,\(to\)代表\(x\)的一个儿子。
我们是从叶子节点向根节点转移的,所以当\(x\)状态为0,\(to\)状态为1时,它是无法转移到一个合法的状态的(可以手画画)。
#include <iostream>
#include <cstdio>
#include <cctype>
#include <vector>
#include <cstring>
using namespace std;
inline long long read() {
long long s = 0, f = 1; char ch;
while(!isdigit(ch = getchar())) (ch == '-') && (f = -f);
for(s = ch ^ 48;isdigit(ch = getchar()); s = (s << 1) + (s << 3) + (ch ^ 48));
return s * f;
}
const int N = 1e5 + 5, inf = 1e9;
int n;
long long ans;
int a[N];
long long f[N][8];
vector <int> son[N];
void init() {
n = read();
for(int i = 1;i <= n; i++) a[i] = read();
for(int i = 1, x, y;i <= n - 1; i++) {
x = read(); y = read();
son[x].push_back(y);
son[y].push_back(x);
}
memset(f, 0xf3, sizeof(f));
}
void dfs(int x, int fa) {
f[x][0] = a[x];
long long tmp[8];
for(int i = 0;i < (int)son[x].size(); i++) {
int y = son[x][i]; if(y == fa) continue;
// cout << x << " " << y << endl;
dfs(y, x);
long long *u = f[x], *v = f[y];
for(int j = 0;j < 8; j++) tmp[j] = u[j];
tmp[1] = max(tmp[1], u[0] + max(v[0], v[1]));
tmp[2] = max(tmp[2], u[1] + max(v[0], v[1]));
tmp[3] = max(tmp[3], u[2] + max(v[0], v[1]));
tmp[4] = max(tmp[4], u[0] + max(v[3], v[4]));
tmp[5] = max(tmp[5], u[4] + max(v[0], v[1]));
tmp[5] = max(tmp[5], u[1] + max(v[3], v[4]));
tmp[6] = max(tmp[6], u[5] + max(v[0], v[1]));
tmp[6] = max(tmp[6], u[2] + max(v[3], v[4]));
tmp[7] = max(tmp[7], u[0] + max(v[6], v[7]));
// for(int j = 0;j < 8; j++) cout << tmp[j] << " ";
// cout << endl;
ans = max(ans, tmp[7]);
ans = max(ans, max(u[3], u[4]) + max(v[3], v[4]));
ans = max(ans, max(u[6], u[7]) + max(v[0], v[1]));
// cout << ans << endl;
for(int j = 0;j < 8; j++) u[j] = tmp[j];
}
}
void work() {
ans = -inf;
dfs(1, 0);
printf("%lld", ans);
}
int main() {
freopen("misaka.in","r",stdin); freopen("misaka.out","w",stdout);
init();
work();
fclose(stdin); fclose(stdout);
return 0;
}
(貌似这题是有点恶心哈)
0827考试 T1的更多相关文章
- 考试T1总结(又CE?!)
考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...
- 某考试T1 game
题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...
- 某考试 T1 arg
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...
- 某考试 T1 lcm
把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b) ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
- 2019.2.14 考试T1 FFT
\(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...
- 某考试 T1 fair (18.5.1版)
转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于 C(n,n/2)/2 ...
- 某考试 T1 str
一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到 ...
- 某考试 T1 monopoly
可以很容易的发现,如果选了最高的房子,那么就不能再选了:否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的. 所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的 ...
随机推荐
- 使用javaScript 取cookie时需要注意的
function getCookie(name) { var cookies = window.top.document.cookie.split('; ');//分号后面有个空格 for (var ...
- (转)Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated
Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated 1.利用gdb 或者valgrind 定位到具体的代码 最近在Linu ...
- 用 Python 写个消消乐小游戏
提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 很多人学习python,不 ...
- BiMPM:Bilateral Multi-Perspctive Matching for Natural Language Sentences
导言 本论文的工作主要是在 'matching-aggregation'的sentence matching的框架下,通过增加模型的特征(实现P与Q的双向匹配和多视角匹配),来增加NLSM(Natur ...
- 基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题
基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题 最近在工作中遇到一个看似很奇怪的,排除起来很费劲,但最后的解决方式又及其简单的问题,下面我们 ...
- centos 8 安装和网络配置
centos 8 系统安装 系统安装步骤 启动服务器之后选择 Install CentOs Linux 8 选择语言然后下一步 配置 磁盘(Installation Destir) 这里选择默认配置 ...
- JS学习第七天
从js-bom入门到放弃 window常用属性: document 返回该窗口内装载的HTML文档 location 返回该窗口装载的HTML文档的URL screen 返回当前浏览者屏幕对象 his ...
- C#LeetCode刷题-二叉搜索树
二叉搜索树篇 # 题名 刷题 通过率 难度 220 存在重复元素 III 19.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 327 区间和的个数 29.5% 困难 3 ...
- Vue 使用v-for对Object进行遍历
v-for 也可以对Object类型数据进行遍历 value在前, key在后 <div v-for="(value,key) in person"> <p> ...
- 钉钉H5微应用
公司新项目要用到Vue+钉钉H5,在此记录一下免密登录: 引入插件: import * as dd from 'dingtalk-jsapi' import { login as loginUrl } ...