Description:

有一棵点数为 N 的树,树边有边权。给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 。 将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的受益。问受益最大值是多少。

Hint:

\(n \le 2^3\)

Solution:

很好的树型dp题

设状态\(f[i][j]\)表示i点子树染j个黑点的最大距离和

然而无法转移

换一种角度,考虑每条边对答案的贡献

设一条边的下面一端u的子树中有k个黑点

则\(Ans=k*(m-k)+(sz[u]-k)*(n-sz[u]-m+k)\)

这样就能用树型背包做了

  1. #include <map>
  2. #include <set>
  3. #include <stack>
  4. #include <cmath>
  5. #include <queue>
  6. #include <cstdio>
  7. #include <cstring>
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <algorithm>
  11. #define ls p<<1
  12. #define rs p<<1|1
  13. using namespace std;
  14. typedef long long ll;
  15. const int mxn=1e5+5;
  16. int n,m,cnt,hd[mxn],sz[mxn];
  17. ll f[2005][2005];
  18. inline int read() {
  19. char c=getchar(); int x=0,f=1;
  20. while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
  21. while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}
  22. return x*f;
  23. }
  24. inline void chkmax(int &x,int y) {if(x<y) x=y;}
  25. inline void chkmin(int &x,int y) {if(x>y) x=y;}
  26. struct ed {
  27. int to,nxt,w;
  28. }t[mxn<<1];
  29. inline void add(int u,int v,int w) {
  30. t[++cnt]=(ed) {v,hd[u],w}; hd[u]=cnt;
  31. }
  32. void dfs(int u,int fa)
  33. {
  34. sz[u]=1; f[u][0]=f[u][1]=0;
  35. for(int i=hd[u];i;i=t[i].nxt) {
  36. int v=t[i].to;
  37. if(v==fa) continue ;
  38. dfs(v,u); sz[u]+=sz[v];
  39. for(int j=min(m,sz[u]);j>=0;--j) {
  40. if(f[u][j]!=-1)
  41. f[u][j]+=f[v][0]+1ll*sz[v]*(n-m-sz[v])*t[i].w; //这里一定要先处理v为0的答案,如果在后面转移就会错
  42. for(int k=min(j,sz[v]);k;--k) {
  43. if(f[u][j-k]==-1) continue ;
  44. ll val=1ll*(k*(m-k)+(sz[v]-k)*(n-m-sz[v]+k))*t[i].w;
  45. f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]+val);
  46. }
  47. }
  48. }
  49. }
  50. int main()
  51. {
  52. memset(f,-1,sizeof(f));
  53. n=read(); m=read(); int u,v,w;
  54. for(int i=1;i<n;++i) {
  55. u=read(); v=read(); w=read();
  56. add(u,v,w); add(v,u,w);
  57. }
  58. dfs(1,1);
  59. printf("%lld",f[1][m]);
  60. return 0;
  61. }

[HAOI2015]树上染色的更多相关文章

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

    4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...

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

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3461  Solved: 1473[Submit][Stat ...

  3. BZOJ4033 HAOI2015 树上染色 【树上背包】

    BZOJ4033 HAOI2015 树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白 ...

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

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

  5. 【BZOJ4033】[HAOI2015]树上染色 树形DP

    [BZOJ4033][HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染 ...

  6. BZOJ_4033_[HAOI2015]树上染色_树形DP

    BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...

  7. BZOJ 4033[HAOI2015] 树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3188  Solved: 1366[Submit][Stat ...

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

    [HAOI2015]树上染色 题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所 ...

  9. [HAOI2015]树上染色(树上dp)

    [HAOI2015]树上染色 这种要算点对之间路径的长度和的题,难以统计每个点的贡献.这个时候一般考虑算每一条边贡献了哪些点对. 知道这个套路以后,那么这题就很好做了. 状态:设\(dp[u][i]\ ...

  10. [HAOI2015]树上染色 树状背包 dp

    #4033. [HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白 ...

随机推荐

  1. SSD垃圾回收

    A complete GC typically:includes four steps: selecting some blocks that contain somestale data as vi ...

  2. json2csharp & json 格式化

    json2csharp: http://json2csharp.com/ bejson: http://www.bejson.com/

  3. [转] ES6展开运算符

    语法 用于函数调用 myFunction(...iterableObj); 用于数组字面量 [...iterableObj, 4, 5, 6] 函数传参 目前为止,我们都是使用Function.pro ...

  4. 从oracle导出数据成csv,将csv导入mongodb问题

  5. mysql-5.7.10-winx64 绿色版安装办法

    mysql-5.7.10-winx64 绿色版安装办法 为了防止安装程序造成电脑系统冗余,经过测试,终于将绿色版的mysql for windows安装成功.当然很多是从事百度搜索到的,但作为一种积累 ...

  6. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-5项目数据库操作封装操作-EF框架

    EF框架有三种基本的方式:DB First(数据库优先),Model First(模型优先),Code First(代码优先). Entity Framework4.1之前EF支持“Database  ...

  7. form表单利用iframe高仿ajax

    html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. 关于ubuntu的ssh远程登录的问题

    一. 安装ssh(参考:http://liuyifan789.iteye.com/blog/2068263) sudo apt-get install openssh-server openssh-c ...

  9. 51Nod1309 Value of all Permutations 期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1309.html 题目传送门 - 51Nod1309 题意 长度为N的整数数组A,有Q个查询,每个查询 ...

  10. BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...