【HAOI2015】树上染色

这题思路好神仙啊,首先显然是树形dp,f[i][j]表示在以i为根的子树中选j个黑点对答案的贡献(并不是当前子树最大值),dp时只考虑i与儿子连边的贡献。此时(i,son[i])产生的收益是(设子树大小为size[i])子树上的黑点个数(j)与子树外的黑点个数(m - j)的乘积乘上这条边的边权(w[i])加上子树上白点的个数(size[i] - j)乘以子树外白点的个数(n - m - size[i] + j)再乘以边权,这些贡献是在加入了根节点以后才产生的新的贡献,与子树上黑白点如何分配无关。

#include<iostream>
#include<cstring>
#include<cstdio>
#define int LL
#define LL long long
#define ma(x) memset(x,0,sizeof(x))
#define MAXN 3010
using namespace std;
struct edge
{int u,v,w,nxt;#define u(x) ed[x].u#define v(x) ed[x].v#define w(x) ed[x].w#define n(x) ed[x].nxt
}ed[2000000];
int first[MAXN],num_e;
#define f(x) first[x]
int f[MAXN][MAXN],du[MAXN],root;
int n,nk,size[MAXN],tmp[MAXN];
void dfs(int x,int fa)
{size[x]=1;for(int i=f(x);i;i=n(i))if(v(i)!=fa)dfs(v(i),x);for(int i=f(x);i;i=n(i))if(v(i)!=fa){ma(tmp);for(int j=0;j<=size[x]&&j<=nk;j++)for(int k=0;k<=size[v(i)]&&k+j<=nk;k++){tmp[j+k]=max(tmp[j+k],f[x][j]+f[v(i)][k]+k*(nk-k)*w(i)+(size[v(i)]-k)*(n-nk-size[v(i)]+k)*w(i));}for(int j=0;j<=nk;j++)f[x][j]=tmp[j];size[x]+=size[v(i)];}
}
inline void add(int u,int v,int w);
signed main()
{
//  freopen("in.txt","r",stdin);
//  freopen("2.in","r",stdin);scanf("%lld%lld",&n,&nk);int a,b,c;for(int i=1;i<n;i++){scanf("%lld%lld%lld",&a,&b,&c);du[a]++;du[b]++;add(a,b,c);add(b,a,c);}for(int i=1;i<=n;i++)if(du[i]==1){root=i;break;}dfs(root,0);cout<<f[root][nk]<<endl;
}
inline void add(int u,int v,int w)
{++num_e;u(num_e)=u;v(num_e)=v;w(num_e)=w;n(num_e)=f(u);f(u)=num_e;
}

转载于:https://www.cnblogs.com/Al-Ca/p/11198618.html

【HAOI2015】树上染色相关推荐

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

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

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

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

  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. bzoj 4033: [HAOI2015]树上染色(树形DP)

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

  6. 洛谷 P3177 [HAOI2015]树上染色

    题目链接 题目描述 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0~ N\) 之内的正整数 \(K\) ,你要在这棵树中选择 \(K\)个点,将其染成黑色,并将其他 的\(N-K\)个 ...

  7. [HAOI2015]树上染色(树形dp,树形背包)

    链接:https://ac.nowcoder.com/acm/problem/19996 来源:牛客网 题目描述 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个 ...

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

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

  9. bzoj4033:[HAOI2015]树上染色

    传送门 我一开始想的是考虑每个点的颜色 设的状态就是\(f[i][j]\)表示\(i\)子树里有\(j\)个黑点的\(i\)子树的收益最大值,后来发现无法转移 那么考虑答案的统计,可以对于边统计答案 ...

  10. bzoj4033 [HAOI2015]树上染色

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4033 重要的思路:与其考虑每一个点对的贡献,不如考虑每条边的贡献(==被经过了几次)! 树形 ...

最新文章

  1. VMware备份研究
  2. beeline执行sql语句_由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考...
  3. Photo Pos Pro 3中文版
  4. NOR flash and NAND flash
  5. 洛谷P1558 色板游戏
  6. vs未能找到程序集platform.winmd_PP体育直播大连人VS恒大:新老8冠王首尾对决竟有十大看点...
  7. 2013年1月23号
  8. TCP UDP IP
  9. Flash AS3.0中文帮助下载
  10. 在Spring IoC中,依赖注入和依赖查找的数据来源区别
  11. c语言计算10亿位圆周率,C语言:圆周率的计算
  12. git-scm.com下载文件特别慢怎么办,自己拿吧
  13. notepad linux版本,Notepad++ Linux版
  14. 交互技术基础(复习)
  15. numpy的argsort和sum和tile函数
  16. 分享一个查看外网IP的工具
  17. 简洁Python命名规范
  18. asp.net 获得根文件夹在服务器上物理路径,asp.net获取网站目录物理路径
  19. 51单片机的温湿度控制系统
  20. 一个 Git 库内管理多个子项目

热门文章

  1. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.0
  2. 将枚举值转换为DropDownList等的选项值
  3. 本地数据源:使用firebird数据库
  4. 2020 新兴技术炒作周期曲线:这 5 个趋势值得注意
  5. C#编程语言之byte[]数组和string的互相转化
  6. 机器学习中的基本数学知识
  7. 安装Ubuntu 出现 SQUASFS error / sd 8:0:0:0 :[sdb] assuming drive cache:write through
  8. pytorch默认初始化_“最全PyTorch分布式教程”来了!
  9. mina android 服务器,MINA框架----------android客户端与服务器端
  10. 061_JavaScript闭包