首页 > 其他分享 >ρars/ey 题解

ρars/ey 题解

时间:2024-08-08 20:07:14浏览次数:8  
标签:cnt ars idx int 题解 ne ey siz

给个链接:ρars/ey

我们考虑一个树上背包。

设 \(f_{u,i}\) 表示在 \(u\) 号节点的子树内删除 \(i\) 个点的最小代价。显然有答案为 \(f_{1,siz_1-1}\)。

接下来我们考虑转移。看这一张图:

这里红圈内的东西为当前的 \(siz_u\),绿圈部分为 \(siz_j\)。

我们枚举 \(x\) 为 \(u\) 子树内已经被删掉的点的数量。考虑 \(x\) 的上界为红圈加绿圈减去 \(u\) 和 \(u\) 的儿子

所以是 \(siz_u+siz_j-cnt-1\),其中 \(cnt\) 为当前是 \(u\) 的第几个儿子。

然后再枚举一个 \(y\),代表 \(j\) 子树内删掉点的数量。

于是我们有 \(f_{u,x}=\min(f_{u,x},f_{u,x-y}+f_{j,y})\)。

接着就是在跑完所有儿子后,再把剩下的点处理掉。具体就是枚举一个 \(i\),然后 \(f_{u,siz_u-1}=\min(f_{u,siz_u-1},f_{u,i}+a_{siz_u-i-1})\),其中 \(i\) 为代价。

代码:

#include<bits/stdc++.h>
#define int long long
#define N 5005
#define M 10005
using namespace std;
int n,a[N],siz[N],f[N][N];
int h[N],e[M],ne[M],idx;
//f_{u,i}表示u节点子树删了i个的代价 
void add(int a,int b){
	e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
void dfs(int u,int fa){
	siz[u]=1;
	int cnt=0;
	for(int i=h[u];~i;i=ne[i]){
		int j=e[i];
		if(j==fa)continue;
		dfs(j,u);
		cnt++;
		for(int x=siz[u]+siz[j]-cnt-1;x;x--){
			for(int y=max(x-siz[u],1ll);y<=x&&y<siz[j];y++){
				f[u][x]=min(f[u][x],f[u][x-y]+f[j][y]);
			}
		}
		siz[u]+=siz[j];
	}
	for(int i=0;i<=siz[u]-cnt-1;i++){
		f[u][siz[u]-1]=min(f[u][siz[u]-1],f[u][i]+a[siz[u]-i-1]);
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<n;i++){
		cin>>a[i];
	}
	memset(h,-1,sizeof h);
	for(int i=1;i<n;i++){
		int a,b;
		cin>>a>>b;
		add(a,b);add(b,a);
	}
	memset(f,0x3f,sizeof f);
	for(int i=1;i<=n;i++){
		f[i][0]=0;
	}
	dfs(1,0);
	cout<<f[1][siz[1]-1];
	return 0;
}

标签:cnt,ars,idx,int,题解,ne,ey,siz
From: https://www.cnblogs.com/zxh923aoao/p/18349608

相关文章

  • CF1514D Cut and Stick 题解
    不知道会不会更不好的阅读体验题目的关键步骤为求出区间绝对众数(频率高于\(\left\lceil\frac{len}{2}\right\rceil\))的出现次数,本文仅仅对这一问题进行探讨,剩余的解题步骤不难理解,可以参考其他题解。解法1考虑一个随机化的解法,从区间中随\(40\)个数,假定其为区间绝对众......
  • 电话号码转换 - 华为机试真题题解(Java)
    考试平台:时习知分值:200分(第二题)考试时间:两小时(共2题)题目描述将电话号码转换,需要实现如下的中英文电话号码转换:输入的字符串中每个数字对应为中文数字中的英文单词,如Double表示两个数字相同。将输入的中文数字字符串转换为英文单词的电话号码。若输入不合法,则输出......
  • 图片表格内容识别转换-II - 华为机试真题题解(Java)
    考试平台:时习知分值:200分考试时间:两小时(共2题)题目描述华为云推出了“通用表格识别”服务,可以将图片表格转换成文本数据。请你将文本数据进一步转换为“文本型表格”,如下图所示:输入现给出一个图片表格的文本数据:每行数据形如line3col1A,表示第3行第1列的单......
  • 20240808题解
    话说T2写了个动态树结果考场调不出来,这下大炮打蚊子了。森林(forest)题面:符合条件的森林中深度相同的点度数相同,\(1\lei\len\),求点数为\(i\)的符合条件的森林的种类数。题解:将森林中每一个根节点连到同一个节点上变成一棵树。令\(f(i)\)表示符合条件的树的种类数,那么\(f(i......
  • SSY20240805提高组T2题解
    题干描述题目描述给定一个长度为......
  • keycloak~关于社区登录的过程说明
    keycloak将第三方登录(社区登录)进行了封装,大体主要会经历以下三个过程:打开社区认证页面,输入账号密码或者扫码,完成社区上的认证由社区进行302重定向,回到keycloak页面keycloak与社区完成一次oauth2授权码认证,通过社区返回的code来获取token,再通过token来获取社区上的用户信息,在这......
  • Crash 的旅行计划 / 蓝色彼岸花 题解
    前言题目链接:Hydro&bzoj。题意简述一棵\(n\)个结点的树上,每个点有点权,有\(m\)次操作:修改\(u\)的点权;查询以\(u\)为一端的简单路径的点权和最大值。对于\(20\%\)的数据:\(n,m\leq10^3\);对于另\(30\%\)的数据:第\(i\)条边连接\(i\)和\(i+1\);对于......
  • key命令操作
    key命令操作查询###查看所有keykeys*###匹配查看*keyssit*###单个字符匹配?keyssit?###可选匹配[]keyssit[e|y]判断KEY类型###随机返回一个KEYrandomkey###判断key是否存在(0|1)existssite#1表示存在0表示不存在###返回KEY的类型typesite......
  • 洛谷 P1019 [NOIP2000 提高组] 单词接龙 题解
    暴搜!!暴搜!!暴搜!!重要的事情说三遍#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,ans,use[N];strings,word[N];voiddfs(strings){intls=s.size();//s的lengthans=max(ans,ls);//求出最长的单词接龙for(inti=0;i<n......
  • 洛谷P2404 自然数的拆分问题——题解
    洛谷P2404题解传送锚点摸鱼环节自然数的拆分问题题目描述任何一个大于\(1\)的自然数\(n\),总可以拆分成若干个小于\(n\)的自然数之和。现在给你一个自然数\(n\),要求你求出\(n\)的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列......