牛客多校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个点,每个点有 ...
随机推荐
- 在.Net MVC结构API接口中推断http头信息实现公共的权限验证过滤器演示样例
//control action public class TestController : ApiController { [MyAuthFilter] public string test(s ...
- 利用栈Stack实现队列(Queue)
实现说明: 入队时,将元素压入s1; 出队时,推断s2是否为空,如不为空,则直接弹出顶元素:如为空.则将s1的元素逐个"倒入"s2.把最后一个元素弹出并出队; 这个思路,避免了重复 ...
- Swift-AES之加密解密
什么是AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代 ...
- HQL 查询数据 (获取页面输入的查询条件字段)
/* * 查询提取位置表所有数据 * */ public String ListEtlExtractPositionOfAll(){ // 接受数据库中传送的code int code = Integ ...
- 玲珑学院OJ 1023 - Magic boy Bi Luo with his excited math problem 树状数组暴力
分析:a^b+2(a&b)=a+b so->a^(-b)+2(a&(-b))=a-b 然后树状数组分类讨论即可 链接:http://www.ifrog.cc/acm/probl ...
- werkzeug 详解
首先,先向大家介绍一下什么是 werkzeug,Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库.这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架, ...
- 解决juqery easyui combobox只能选择问题
1.首先设定框为 combobox样式,该字段值为了进行值的显示 <tr class="odd_row"> <td class="TableLabel_ ...
- Kconfig SourceCode GDB调试 *****
1.GDB&makefile scripts->Makefile编译FLAGS -g HOSTCC = gcc HOSTCXX = g++ HOSTCFLAGS := HOSTCXXF ...
- E20180124-hm
introspection n.自我反省; 反省,内省; capacity n. 容量; 性能; 才能; 生产能力; synthesize vt. 综合; 人工合成; (通过化学手段或生物过程) 合成 ...
- 栗染-Not enough physical memory is available to power on this virtual machine with its configured settings.
这是在打开虚拟机的时候报的错 解决办法:打开虚拟机的时候选择以管理员身份运行()目测可以 原文参考来自:http://blog.csdn.net/qq_35757415/article/details ...