题解:看着题目感到恐惧,什么一个点选黑选白要是1e5我肯定会往淀粉质想了,就很害怕,我又不会。。然后一看数据范围2000,于是突然开心,想写题。N…N^2应该美滋滋?dp[x][k]表示x的子树中选择k个黑点。然后就常规树形背包一搞?一过样例,交了,WA??我写法错了??蜜汁memset,改了改成了TLE。。一看这题的AC率,一定是新加的数据造成的。发现也没什么用,于是开始自闭,这个方程怎么越看越觉得想N^3呢,内心一阵卧槽,一向不会算复杂的我,于是开始思考,怎么就变大了,这背包就是这么写的呀。然后找了加数据后的题解,然后就惊了,,这不是也是N^3怎么他就飞快了。。。哦原来是这样,相当于在做背包时,是在枚举两颗不同子树中的点(或者说已经dfs完的那些点和当前这颗子树),出现在LCA处,也就是每一对点都只在LCA处被计算一次,那么就稳的N^2了,哇,原来复杂度是这么算的啊。dp太美丽了!!!

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2005;
const ll inf=1e18;
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
ll dp[maxn][maxn];
int n,k;
int fir[maxn*2],nxt[maxn*2],to[maxn*2];
ll val[maxn*2];
int cnt=0,tot;
int siz[maxn*2];void add_e(int x,int y,ll tt)
{++cnt;nxt[cnt]=fir[x];fir[x]=cnt;to[cnt]=y;val[cnt]=tt;
}
void dfs1(int x,int fa)
{siz[x]=1;dp[x][0]=dp[x][1]=0;for(int i=2;i<=k;i++)dp[x][i]=-inf;for(int i=fir[x];i;i=nxt[i]){int v=to[i];if(v==fa)continue;dfs1(v,x);for(int j=min(siz[x],k);j>=0;j--){for(int e=min(siz[v],k-j);e>=0;e--){ll ans=val[i]*(e)*(k-e);ll ans1=val[i]*(siz[v]-e)*(n-k-siz[v]+e);dp[x][j+e]=max(dp[x][j+e],dp[x][j]+dp[v][e]+ans+ans1);}}siz[x]+=siz[v];}
}
int main()
{n=read();k=read();int p,q;ll tmp;//memset(dp,,sizeof(dp));for(int i=1;i<n;i++){p=read();q=read();tmp=read();add_e(p,q,tmp);add_e(q,p,tmp);}dfs1(1,0);cout<<dp[1][k]<<"\n";
}

  

转载于:https://www.cnblogs.com/intwentieth/p/9840521.html

BZOJ 4033: [HAOI2015]树上染色相关推荐

  1. bzoj 4033: [HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1786  Solved: 754 [Submit][Sta ...

  2. [BZOJ4033][HAOI2015]树上染色

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2108  Solved: 901 [Submit][Sta ...

  3. [BZOJ4033][HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2437  Solved: 1034 [Submit][St ...

  4. bzoj4033: [HAOI2015]树上染色(树形dp)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 3269  Solved: 1413 [Submit][St ...

  5. Luogu P3177 [HAOI2015] 树上染色(树上背包)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P3177 [HAOI2015] 树上染色 有一棵点数为 NNN 的树,树边有边权.给你一 ...

  6. BZOJ 4043 [HAOI2015]树上操作 dfs序 线段树

    $ \Rightarrow $ 戳我进BZOJ原题 $ \Rightarrow $ 戳我进洛谷原题 [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 25 ...

  7. bzoj 4034: [HAOI2015]树上操作(树链剖分+线段树区间更新)

    4034: [HAOI2015]树上操作 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 4981  Solved: 1603 [Submit][St ...

  8. [HAOI2015]树上染色(树形背包)

    有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之间的距离加 ...

  9. BZOJ 4033: [HAOI2015]T1

    题意:有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整 数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的 N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之 ...

最新文章

  1. 基于深度学习的医学图像配准综述
  2. 什么是NIO?NIO的原理是什么机制?
  3. Java:网络编程之UDP的使用
  4. 应届算法岗,选择巨头还是AI明星创业公司
  5. 如何在 SAP Spartacus 里添加自定义页面 - Custom Page
  6. SharePoint at .NET技术大会
  7. jvm 性能_JVM性能魔术
  8. 奥特曼在银行里下象棋的梗
  9. 印象笔记再WIN10同步失败解决方法
  10. tf-idf Sklearn文本数据的处理
  11. 【微信小程序|组件库】一款清新且简洁的卡片样式
  12. scrum master_你能使我成为一个scrum master吗
  13. PHP合成生成GIF动图
  14. 从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA
  15. Android(小米miui)如何判断当前应用是否允许NFC权限
  16. Proxmox VE 桌面虚拟化(windows 10)集群尝试
  17. 字符串--Leetcode (python)
  18. 说说JS在IE中的内存泄露问题
  19. 【C语言】案例四十六 点名册(一)
  20. html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型

热门文章

  1. mysql空间数据类型解释_MySQL空间数据类型
  2. 设置webstorm实时预览看这一篇就够了,5分钟解决!!
  3. Python入门--python中的global
  4. Java集合框架:ArrayList扩容机制解释
  5. 并查集路径压缩和按rank合并代码实现
  6. 数据库实验2:数据库的建立与维护
  7. bzoj 1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(BFS)
  8. [paper reading] FCOS
  9. [UFLDL] Exercise 1C:Softmax Regression
  10. OPNET网络仿真分析-1.2、OPNET安装教程