首页 > 其他分享 >AT_abc348_e 的题解

AT_abc348_e 的题解

时间:2024-04-08 19:13:17浏览次数:28  
标签:int 题解 long mxn abc348 节点

(一)

感觉 D>E。

考虑换根DP,把节点 \(1\) 当作一开始的根节点。

先搜一遍,把 \(f(1)\) 算出。

当将计算的节点从父结点往子节点转移时,每个节点到计算的节点的距离要么 \(-1\) 要么 \(+1\),取决于是否在子节点的子树内。

可以提前处理字数内 \(C\) 的值的和,来计算 \(f\) 的变化量。

(二)

注意:这题答案可能非常大, \(min\) 一开始要设为 \(10^{20}\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=1e6+10;
int n,head[mxn],cnt,dep[mxn],sum,dp[mxn],s[mxn],c[mxn];
struct node{
	int to,nxt;
}edge[mxn<<1];
void add(int u,int v){
	edge[++cnt]=(node){v,head[u]};
	head[u]=cnt;
}
void dfs(int u,int fa){
	dep[u]=dep[fa]+1ll;
	s[u]=c[u];
	for(int i=head[u];i;i=edge[i].nxt){
		int v=edge[i].to;
		if(v==fa)continue;
		dfs(v,u);
		s[u]+=s[v];
	}
}
void dfs2(int u,int fa){
	for(int i=head[u];i;i=edge[i].nxt){
		int v=edge[i].to;
		if(v==fa)continue;
		dp[v]=dp[u]-s[v]+(sum-s[v]);
		dfs2(v,u);
	}
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%lld%lld",&u,&v);
		add(u,v),add(v,u);
	}
	for(int i=1;i<=n;i++)scanf("%lld",&c[i]),sum+=c[i];
	dfs(1,0);
	for(int i=1;i<=n;i++)dp[1]+=(dep[i]-1ll)*c[i];
	dfs2(1,0);
	int ans=1e20;
	for(int i=1;i<=n;i++)ans=min(ans,dp[i]);
	printf("%lld",ans);
	return 0;
}

标签:int,题解,long,mxn,abc348,节点
From: https://www.cnblogs.com/Jh763878/p/18122335

相关文章

  • CF1292B 题解
    Aroma'sSeatch题意简述题目链接。一个二维平面内有无限个点,从\(0\)开始编号,编号为\(0\)的点的坐标为\((x_{0},y_{0})\)。对于一个编号为\(i(i>0)\)的点,它的坐标为\((a_{x}\cdotx_{i-1}+b_{x},a_y\cdoty_{i-1}+b_{y})\)。Aroma最开始在点\((x_s,y_s)\)处,她每......
  • CF1744F MEX vs MED 题解
    题目传送门题目大意给定一个数列,求满足\(\operatorname{mex}(a_l\sima_r)>\operatorname{med}(a_l\sima_r)\)的区间\([l,r]\)的个数。解题思路记\(p_i\)为\(i\)出现的位置。我们可以枚举\(d\),先确定\(\operatorname{mex}(a_l\sima_r)>d\)的区间。由于数列是\(......
  • CF1951E No Palindromes 题解
    题目大意给出一个字符串sss,要求将sss分为若干个非回文子串,输出......
  • 谢启鸿高等代数第四版习题7.7部分习题解析part2.以及部分第7章复习题
    7.7部分定理:以为特征值的K阶若当块个数为11.设n阶矩阵A的特征值全为1,求证:对任意的正整数K,与A相似。证明:=(易证故此处不再证明)而且的特征值全为1。的特征值为1的k阶若当块的个数为接下来只需证明相似于即可;即证明两者有相同的约当标准型.由书上7.8节的数学归纳可以知道......
  • Unity编辑器中运行正常,发布后报shader为null异常问题解决方案
    在Unity中,Shader是从代码中进行加载的,编辑器中并没有引用。在编辑器中运行项目没有问题,但当项目发布到移动平台,如ios、android、UWP之后,游戏中并不能找到对应的shader。因为Shader在场景中并未被引用,所以没有被打包。解决办法1在ProjectSettings里面的Graphics,添加上修改的打包......
  • P4462 题解
    题目传送门请确保您接触过莫队再阅读此文:对于所有询问,和普通莫队一样的分块然后排序。在这里只讨论add和del操作的具体实现。题目中需要求一段区间的异或值,所以我们可以预处理序列\(a\)的“前缀异或值”pre_xor,题目中的\(a_x\bigoplusa_{x+1}\bigoplus\dots\bigopl......
  • ABC348G题解
    令\(f_i\)为当\(k=i\)时的答案。令\(g_i\)为\(f_i+\max\limits_{j\inS}b_j\)。也就是不减去\(b\)的最大值的结果。直接做是\(O(n^2)\)的,考虑分治,令两个子问题的\(f,g\)分别为\(fl,gl\)和\(fr,gr\)。合并的时候做一个\[f_i=\max(\max\limits_{c+d=i}(gl_c+fr......
  • 蓝桥杯嵌入式2023年第十四届省赛主观题解析
    1 题目2 代码/*Includes------------------------------------------------------------------*/#include"main.h"#include"adc.h"#include"rtc.h"#include"tim.h"#include"gpio.h"/*Privateinclud......
  • Hetao P1178 冒险者 题解 [ 绿 ][ 最短路 ][ 线性 dp ]
    原题题解本蒟蒻采用的和大部分人解法不同,是根据当前标记值的总和跑最短路的一种解法。思路30min,调代码2h的我太蒻了首先观察题面可以发现本题求的是最少操作数,由于要求最小且有变化的过程,所以可以使用dp求解,也可以使用最短路算法求解,本篇先介绍最短路的算法。其实......
  • ABC218E Destruction题解
    ABC218EDestruction题解题意给你一个\(n\)个点\(m\)条边的带权无向联通图,你可以删去任意条边,要求保证图联通的情况下删去边的权值和最大。\((n\le2\cdot10^5\,\m\le2\cdot10^5\,\-10^9\lee_i\le10^9)\)(\(e_i\)为边权)分析首先我们考虑边权全为正的情况,那么我们删......