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的更多相关文章

  1. 牛客多校Round 10

    咕咕咕.... 去烽火台和兵马俑了

  2. 牛客多校Round 9

    Solved:1 rank:112 E. Music Game 题解说有个非简化的原题 bzoj4318 #include <bits/stdc++.h> using namespace ...

  3. 牛客多校Round 8

    Solved:2 rank:164 签了两个oeis,但这样真的开心嘛

  4. 牛客多校Round 6

    Solved:3 rank:156 J. Heritage of skywalker 学习一下nth_element 可以o (n)的找出前多少大的元素 #include <bits/stdc+ ...

  5. 牛客多校Round 5

    Solved:3 rank:195 F. take 官方题解:小 A 在打开第 i 个箱子后会交换手中的钻石和第 i 个箱子中的钻石 当且仅当第 i个箱子的钻石是前 i 个箱子打开后出现的所有钻石里最 ...

  6. 牛客多校Round 4

    Soved:3 rank:133 A.Ternay String 欧拉降幂一下 但是反复求phi会超时 但mod是同一个就可以记忆化一下 #include <bits/stdc++.h> ...

  7. 牛客多校Round 3

    Solved:2 rank:306 跑路场..... A.PACM team 简单背包记录路径都写挂 退役算了 #include <bits/stdc++.h> using namespa ...

  8. 牛客多校Round 1

    Solved:1 rank:249 E. Removal dp i,j表示前i个数删除了j个且选择了第i个的答案 类似字符串的dp 预处理一下nex i_k即i后面k第一次出现的位置  就好转移了 # ...

  9. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

随机推荐

  1. [计算机故障]excel无法存盘,总是自动重启恢复

    同事的excel文档,无法保存.总是提示什么要发送错误报告.错误报告中的错误信息包含event type:BXE.这个文件大小约1M多.工作簿中包含表大约有30张,表名称为中文.我去看了看,其他电子表 ...

  2. RK3288的gpio设置【转】

    本文转载自:http://blog.csdn.net/keleming1/article/details/51034766 转http://www.360doc.com/content/14/1227 ...

  3. Use of implicitly declared global variable

    https://stackoverflow.com/questions/7604419/resharper-javascript-use-of-implicitly-declared-global-v ...

  4. 两道NOIP里的DP题目~

    拦截导弹    来源:NOIP1999(提高组) 第一题 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 ...

  5. 两个ajax写在一起报错

    这样做完导致的结果是:在谷歌浏览器页面正常显示,在火狐浏览器会不定期出现系统异常错误提示!最后分析原因是: 从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死.等待的状态,从一 ...

  6. linux centos7 安装mysql-5.7.17教程(图解)

    1系统约定安装文件下载目录:/data/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置:/data/mysql日志保存位置:/data/log/mysql 2下 ...

  7. 15.extjs tabPanel的用法

    转自:https://blog.csdn.net/mezhaha/article/details/78878894 本文导读:TabPanel继承于Ext.Panel,Ext.TabPanel就是有选 ...

  8. Linux学习之路2 Bash的基本操作

    一.SHELL的介绍 shell分为两种:CLI(command Line Interface)和GUI(Graphical User Interface) 操作系统中的shell: GUI:GNOM ...

  9. WebSphere Application Server切换JAVA SDK版本

    最近在Windows Server 2008 R2服务器中搭建了一套IHS+WAS8.5集群环境,测试一个简单的demo应用没有问题,可是在部署正式应用时总是报类版本错误.换了好几个JDK对项目进行编 ...

  10. 使用JS分页 <span> beta 1.0

    <html> <head> <title>分页</title> <style> #titleDiv{ width:500px; backgr ...