刷题记录:牛客NC24263[USACO 2018 Feb G]Directory Traversal
admin
2024-02-10 07:47:52
0

传送门:牛客

题目描述:

题目较长,此处省略
输入:
8
bessie 3 2 6 8
folder1 2 3 4
file1 0
folder2 1 5
file2 0
folder3 1 7
file3 0
file4 0
输出:
42

感觉是一道较难的二次扫描换根dp的题目

主要思路:

  1. 首先分析一下我们的题目,我们会发现当前的节点uuu如果往下走到节点vvv的话,那么消耗的数值为v文件的name+1v文件的name+1v文件的name+1,但是从v节点往上走到uuu节点的话消耗的是../../../,也就是333点消费.然后题目的要求就是求出一个文件夹节点,使其到任意其他叶子节点的距离和最小(注意此处我们的文件夹节点默认是有文件的)
  2. 然后根据树形dp的套路,我们应该不难想到使用f[u]来记录所有uuu的子树中的叶子节点,并且应该有一个显然的转移想法,当前的uuu节点的距离和应该是所有子节点的距离和,也就是∑fv\sum_{}^{}{f_v}∑​fv​,并且在这个的基础上还需要加上当前结点往下走一步的贡献(这个贡献与我们的v节点的长度有关,我们可以先进行预处理,存在w[u][v]中).然后就不难得出我们的dp方程了:

f[u]+=leaf_size[v]∗w[u][i]+f[v];f[u]+=leaf\_size[v]*w[u][i]+f[v];f[u]+=leaf_size[v]∗w[u][i]+f[v];

leaf_size存储的是当前v节点的所有叶子节点的个数leaf\_size存储的是当前v节点的所有叶子节点的个数leaf_size存储的是当前v节点的所有叶子节点的个数

  1. 但是显然的,我们现在存储的只是每一个节点的儿字的贡献,但是事实上我们的路径之和还包括我们的父亲对其的贡献.这就需要我们使用换根dp换根dp换根dp的想法了
  2. 我们再使用一个数组g[u]g[u]g[u]来存储我们父亲那边的贡献.这个贡献由两部分组成:
    1.一部分是我们当前结点的兄弟结点的贡献
    2.一部分是我们的当前结点的父亲的父亲的那边的贡献

对于第一部分来说,我们考虑一下我们的文件路径的移动方式,对于我们的兄弟结点中的每一个叶子结点,我们都是需要我们的当前的节点往上移动一步,然后再往下移动到各个节点.这一部分的总贡献就是:3∗(leaf_size[u]−leaf_size[v])+f[u]−f[v]−w[u][v]∗leaf_size[v]3*(leaf\_size[u]-leaf\_size[v])+f[u]-f[v]-w[u][v]*leaf\_size[v]3∗(leaf_size[u]−leaf_size[v])+f[u]−f[v]−w[u][v]∗leaf_size[v],注意这一部分我们还需要减去我们的刚开始由uuu节点往下走到v节点,因为我们的f[v]f[v]f[v]并没有包括这一部分

对于我们的第二部分来说,我们发现需要求出的父亲的父亲的贡献其实在我们的dfs过程中就可以求出来了,为g[u]g[u]g[u].但是类似的,我们还需要加上我们的当前节点v走到节点u的贡献.也就是3∗(leaf_size[1]−leaf_size[u])3*(leaf\_size[1]-leaf\_size[u])3∗(leaf_size[1]−leaf_size[u])

对于最终的答案,就是在所有的f[u]+g[u]−leaf_size[1]f[u]+g[u]-leaf\_size[1]f[u]+g[u]−leaf_size[1]中取最小值即可,为什么要减一呢,这是因为我们在之前求路径的时候将每一个叶子节点也多加了一个$$符号,所以我们需要在答案过程中减去每一个叶子节点的多余贡献

下面是具体的代码部分:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define maxn 1000000
#define ll_maxn 0x3f3f3f3f3f3f3f3f
const double eps=1e-8;
int n;
vectortree[maxn],w[maxn];
ll g[maxn],f[maxn];//记录儿子叶子节点的总路径/除儿子以外的叶子节点的和
ll node_length[maxn],leaf_size[maxn];
void dfs1(int u) {if(tree[u].size()) {for(int i=0;iint v=tree[u][i];dfs1(v);leaf_size[u]+=leaf_size[v];f[u]+=leaf_size[v]*w[u][i]+f[v];}	}else {leaf_size[u]=1;}return ;
}
ll ans=ll_maxn;
void dfs2(int u) {if(tree[u].size()) {for(int i=0;iint v=tree[u][i];g[v]=3*(leaf_size[1]-leaf_size[u])+g[u]+3*(leaf_size[u]-leaf_size[v])+f[u]-f[v]-leaf_size[v]*w[u][i];dfs2(v);}ans=min(ans,g[u]+f[u]-leaf_size[1]);}return ;
}
int main() {n=read();string s;int num;int v;for(int i=1;i<=n;i++) {cin>>s;node_length[i]=s.length();num=read();for(int j=1;j<=num;j++) {v=read();tree[i].push_back(v);}}for(int i=1;i<=n;i++) {for(int j=0;jint v=tree[i][j];w[i].push_back(node_length[v]+1);}}dfs1(1);dfs2(1);cout<

相关内容

热门资讯

消息称百度旗下昆仑芯瞄准500... 6 月 29 日消息,据《The Information》昨日援引知情人士消息,百度旗下 AI 芯片...
打造夏日消费新场景 第35届北... 北京商报讯(记者 翟枫瑞)6月29日消息,第35届北京国际燕京啤酒文化节新闻发布会在京举行。本届啤酒...
社保基金持仓数据出炉,一季度增... 最近各大上市公司一季度财报都公开了,咱们国家社保基金的持仓数据也全部曝光。目前社保拿着比亚迪价值44...
36氪首发 | 海思、中兴团队... 作者 | 乔钰杰 编辑 | 袁斯来 硬氪获悉,广州宸思通讯科技有限公司(以下简称“宸思科技”)近日完...
两天蒸发47亿市值!一纸税务通... 一纸税务通知书,能让一家百亿龙头两天蒸发47亿市值。 6月22日,北大荒(600598.SH)公告称...
SK海力士将投资1100万亿韩... SK集团会长崔泰源6月29日在韩国“三大重大计划”发布会上宣布,公司将投资1100万亿韩元扩大半导体...
两只A股,终止上市! 两家A股公司,即将摘牌。 6月29日,退市沪科(600608.SH)公告称,上海证券交易所将在202...
原创 M... 一家成立近十年的自动驾驶公司,在IPO时吸引了14家基石投资者认购近一半的发行股份,其中不乏奔驰、比...
基金忠言|国寿安保滤镜碎,三年... 图片来源:视觉中国 蓝鲸新闻6月29日讯(记者 祁和忠)保险系基金公司国寿安保总经理换人了。 6月2...
三星电机计划加码玻璃基板!相关... 6月29日,玻璃基板概念股午后有所回升, 华工科技(000988.SZ)逼近涨停, 彩虹股份(600...
拉萨海关持续壮大外贸经营主体 ...   新华网拉萨6月28日电(记者蒋梦辰)近日,记者从拉萨海关获悉,今年前5个月,西藏有进出口实绩的外...
机构:二季报临近,医药生物板块... 6月29日,华源证券发布了一篇医药生物行业的研究报告,报告指出,业绩期临近,产业链景气度有望再次迎来...
每日收评科创50放量涨超4.5... 财联社6月29日讯,三大指数全线收红,创业板指探底回升,科创50指数大涨4.61%。沪深两市成交额3...
6月多地土拍结构性升温:深圳单... 进入2026年6月,不少城市核心区地块集中诞生高溢价宗地,热度突出的城市包含深圳、杭州、长沙。 其中...
业绩炸裂!盛达资源半年预盈3.... 6月29日,贵金属矿山龙头盛达资源(000603.SZ)发布 2026 年半年度业绩预告,上半年业绩...
A股午后拉升三大股指收涨:半导... A股三大股指6月29日开盘涨跌互现。早盘沪强深弱,创指一度跌超2%。半导体午后拉升,带动两市上涨,沪...
原创 空... 前言 大家好,我是老金。 这几天,两幅极度割裂的画面放在一起,把我看笑了。 一边是在持续的热浪下,欧...
澳大利亚审慎监管局拟放宽银行风... 澳大利亚审慎监管局(APRA)6月29日就修改 银行信用风险资本设定公开征求意见,旨在加大信贷投放以...
全民炒股,急踩刹车!韩国股市突... 屈红燕/证券时报网 全民狂欢、交易高度拥挤、杠杆资金猛增、新入市投资者表现激进、大型IPO吸金等现象...