首页 > 其他分享 >P3177 [HAOI2015] 树上染色

P3177 [HAOI2015] 树上染色

时间:2023-03-06 19:55:19浏览次数:42  
标签:sz nxt int 染色 father P3177 HAOI2015 go hd

有一棵点数为 n 的树,树边有边权。

给你一个在 0∼n之内的正整数 k,

选择 k个点,将其染成黑色,并将其他 的 n−k个点染成白色。

你会获得黑点两两之间的距离加上白点两两之间的距离的和的收益。问受益最大值是多少

 

  考虑一条边z(x->y) 对答案的贡献 ORZ,

 f[x][j]= f[x][j-k]+f[y][k] + z*j*(m-j) +z*(sz[y]-j)  *( n-sz[y] -(m-j) )

 

#include <bits/stdc++.h>
using namespace std ;
 const int N=2003,M=2003*2;
 #define int long long
 int nxt[M],go[M],hd[N],w[M],all;
 
 int n,m,sz[N];
 int f[N][N];
 
 void add(int x,int y,int z){
 	go[++all]=y,nxt[all]=hd[x],hd[x]=all;
 	w[all]=z;
 }
 
 void dfs(int x,int father){
 	sz[x]=1;
 	memset(f[x],-1,sizeof f[x]);
 	f[x][0]=f[x][1]=0;
 	
 	for(int i=hd[x];i;i=nxt[i]){
 		int y=go[i]; if(y==father) continue;
 		dfs(y,x);
 		sz[x]+=sz[y];
 	}	
 	for(int i=hd[x];i;i=nxt[i]){
 		int y=go[i]; if(y==father) continue;
 		
 		for(int j=min(m,sz[x]);j>=0;j--)
 		 for(int k=0;k<=min(j,sz[y]);k++) if(f[x][j-k]!=-1)
 		f[x][j]= max(f[x][j],f[x][j-k]+f[y][k]+
 		w[i]*k*(m-k)+ w[i]*(sz[y]-k)*(n-sz[y]-m+k));
 	}
 }
 signed main(){
 	cin>>n>>m;
 	int x,y,z;
 	for(int i=1;i<n;i++) 
 		cin>>x>>y>>z,add(x,y,z),add(y,x,z);
 	dfs(1,0);
 	cout<<f[1][m]<<endl;
 }
 
 
 
 
 

 

标签:sz,nxt,int,染色,father,P3177,HAOI2015,go,hd
From: https://www.cnblogs.com/towboa/p/17185146.html

相关文章

  • AcWing 4490. 染色题解
    题目描述样例输入:612215211111输出3算法描述思路我们以样例为例讲讲思路。如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)C++代......
  • 环上给n个区域用m种颜色染色,相邻不同
    问题在一个环上给n个区域用m种颜色染色,要求相邻区域颜色不同。方法1、公式可以推出来一个公式为:\(res=(m-1)^n+(-1)^n(m-1),(m≥2)\)直接用就行了2、dp递推详细过......
  • [HAOI2015] 按位或
    [HAOI2015]按位或LuoguP3175题目描述刚开始你有一个数字\(0\),每一秒钟你会随机选择一个\([0,2^n-1]\)的数字,与你手上的数字进行或(C++,C的|,pascal的or)操作。选择......
  • 分考场 【 DFS + 染色问题 】
    试题历届试题分考场资源限制时间限制:1.0s 内存限制:256.0MB问题描述n个人参加某项特殊考试。为了公平,要求任何两个认识的人不能分在同一个考场。求是少需......
  • [HAOI2018]染色
    \(\text{Solution}\)第二道二项式反演题挺套路的设\(g(i)\)为恰好出现\(S\)次的颜色至少有\(i\)种那么\[g(i)=\binom{m}{i}\binom{n}{is}\frac{(is)!}{(s!)^i}(......
  • 染色问题
    发现没学相关知识所以学学笔者写这篇文章时没应用过所以全是理论知识\(1.\)基础知识\(\textbf{定义1.1}\text{(置换)}\)一个\(S\)上的置换\(f:S\toS\)是一个......
  • 【NOIP2010】【codevs1069】关押罪犯(二分答案+二分图染色)
    problem将n个罪犯分别关押进2座监狱每2个罪犯之间有一个冲突值,当他们在同一监狱时就会爆发让爆发的冲突值(最大的那个)最小,求那个最小值solution考虑判定:是否存在一种分配方案......
  • 【YBT2023寒假Day6 C】子串染色(SAM)(线段树)(启发式合并)
    子串染色题目链接:YBT2023寒假Day6C题目大意对于一个s的子串t,把它在s中所有出现的位置包含的所有下标染黑,黑色连续段的数目是子串t的价值。然后给你一个k和一......
  • POJ 1436 Horizontally VisibleSegments(线段树成段更新+区间覆盖染色)
    DescriptionThereisanumberofdisjointverticallinesegmentsintheplane.Wesaythattwosegmentsarehorizontallyvisibleiftheycanbeconnectedbyaho......
  • 【YBT2023寒假Day4 A】网格染色(DP)(矩阵乘法)(DFT)
    网格染色题目链接:YBT2023寒假Day4A题目大意有一个n*3的网格,你可以选恰好m个格子染成黑色。然后对于一个黑点,我们对它周围的\(8\)个点中的一些有限制不能是黑点,......