牛客多校Round 2
Solved:3
rank:187
H.travel
题意:给一颗带有点权的树 找三条不相交的链 使得点权最大
题解:使用树形DP dp[x][i][0/1] 表示x节点选择i条链 有没有经过x的链
对于每一个回溯的状态 下面的结点已经处理好了
但是处理当前结点时还有一种有两条经过x的链 实际上他们可以合成一条链
为了避免重复计算 经过当前结点的权值在更新时计算
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n;
ll val[];
ll dp[][][];
vector<int> g[]; void dfs(int x, int fa)
{
ll tmp[][]; ll f[][];
for(int i = ; i < ; i++) tmp[i][] = tmp[i][] = tmp[i][] = ;
for(int i = ; i < g[x].size(); i++)
{
int v = g[x][i];
if(v == fa) continue;
dfs(v, x);
memcpy(f, tmp, sizeof(tmp)); for(int a = ; a < ; a++)
for(int b = ; b < ; b++)
{
if(a + b > ) continue;
for(int c = ; c < ; c++)
for(int d = ; d < ; d++)
{
if(c + d > ) continue;
tmp[a + b][c + d] = max(tmp[a + b][c + d], f[a][c] + dp[v][b][d]);
}
}
}
for(int i = ; i < ; i++)
{
dp[x][i][] = max(dp[x][i][], tmp[i][]);
dp[x][i][] = max(dp[x][i][], tmp[i][] + val[x]); if(i < )
{
for(int j = ; j < ; j++)
for(int k = j + ; k < ; k++)
dp[x][i + ][j] = max(dp[x][i + ][j], tmp[i][k] + val[x]);
}
}
} int main()
{
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%lld", &val[i]);
for(int i = ; i < n; i++)
{
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(, -);
ll ans = ;
for(int i = ; i < ; i++) ans = max(ans, dp[][i][]);
printf("%lld\n", ans);
return ;
}
/*
13
10 10 10 10 10 1 10 10 10 1 10 10 10
1 2
2 3
3 4
4 5
2 6
6 7
7 8
7 9
6 10
10 11
11 12
11 13
*/
牛客多校Round 2的更多相关文章
- 牛客多校Round 10
咕咕咕.... 去烽火台和兵马俑了
- 牛客多校Round 9
Solved:1 rank:112 E. Music Game 题解说有个非简化的原题 bzoj4318 #include <bits/stdc++.h> using namespace ...
- 牛客多校Round 8
Solved:2 rank:164 签了两个oeis,但这样真的开心嘛
- 牛客多校Round 6
Solved:3 rank:156 J. Heritage of skywalker 学习一下nth_element 可以o (n)的找出前多少大的元素 #include <bits/stdc+ ...
- 牛客多校Round 5
Solved:3 rank:195 F. take 官方题解:小 A 在打开第 i 个箱子后会交换手中的钻石和第 i 个箱子中的钻石 当且仅当第 i个箱子的钻石是前 i 个箱子打开后出现的所有钻石里最 ...
- 牛客多校Round 4
Soved:3 rank:133 A.Ternay String 欧拉降幂一下 但是反复求phi会超时 但mod是同一个就可以记忆化一下 #include <bits/stdc++.h> ...
- 牛客多校Round 3
Solved:2 rank:306 跑路场..... A.PACM team 简单背包记录路径都写挂 退役算了 #include <bits/stdc++.h> using namespa ...
- 牛客多校Round 1
Solved:1 rank:249 E. Removal dp i,j表示前i个数删除了j个且选择了第i个的答案 类似字符串的dp 预处理一下nex i_k即i后面k第一次出现的位置 就好转移了 # ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
随机推荐
- java 学习第一步---安装JDK以及配置环境变量
1.下载jdk 链接:https://pan.baidu.com/s/1FiTGhxdHK0KTFawdkLT26g 提取码:zcy0 我已经在官网上面下载了1.8的jdk,通过百度云盘分 ...
- 【bzoj1406】[AHOI2007]密码箱
x2 ≡ 1 mod n => x2 = k * n + 1 => n | (x + 1) * (x - 1) 令n = a * b,则 (a | x + 1 且 b | x - 1) 或 ...
- libjpeg交叉编译
下载libjpeg http://libjpeg.sourceforge.net/ 解压tar -zxf jpegsrc.v6b.tar.gz cd jpeg-6b cp /usr/bin/libto ...
- Array.Copy vs Buffer.BlockCopy
http://stackoverflow.com/questions/1389821/array-copy-vs-buffer-blockcopy Since the parameters to Bu ...
- Java工作中常用到的工具
刚看但网上一篇Java最流行工具的文章,结合自己日常应用总结一下开发工作中常用到的工具. 一,Java版本,jdk8,也是Java普及最快的版本,除了本身性能提升外,新增的函数式编程特性也让开发效率更 ...
- Java IO 字节流与字符流 (二)
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
- MySQL 操作语句
解释:|:或;{}:必选;[]:可选 创建数据库并指定字符编码: CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTE ...
- Linux C编程之一:Linux下c语言的开发环境
---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU C/C++编译器gcc: 调试器: ...
- GG_Logs 日志类库封装使用说明
3.6.GG_Logs 日志类库封装使用说明 GG_Logs类库项目,Nuget安装log4net 添加代码配置代码: [assembly: log4net.Config.XmlConfigurato ...
- java8的LocalDateTime与Date互相转换
LocalDateTime转Date Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); Date ...