[USACO10MAR]Great Cow Gathering G 解题报告

P2986 [USACO10MAR]Great Cow Gathering G(二次扫描法) 换根法,也叫二次扫描法,是树形DP的内容,这题是一道模板题,由于边长的加入,导致我原来最喜欢的vector模拟树形结构变得不那么好用,就学习了用建图的方法建树,DP部分很简单就不做过多描述了。 // // Created by SANZONG on 2020/8/6. // #include "bits/stdc++.h" using namespace std; #define N 500005 typedef long long ll; struct edge{ int to,next,w; 阅读详情

[USACO10MAR]Great Cow Gathering G

题目描述

Bessie 正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。

每个奶牛居住在 N 个农场中的一个,这些农场由 N−1 条道路连接,并且从任意一个农场都能够到达另外一个农场。道路 ii 连接农场Ai 和 Bi,长度为 Li。集会可以在 N 个农场中的任意一个举行。另外,每个牛棚中居住着 Ci 只奶牛。

在选择集会的地点的时候,Bessie 希望最大化方便的程度(也就是最小化不方便程度)。比如选择第 X 个农场作为集会地点,它的不方便程度是其它牛棚中每只奶牛去参加集会所走的路程之和(比如,农场 i 到达农场 X 的距离是 20,那么总路程就是 Ci×20)。帮助 Bessie 找出最方便的地点来举行大集会。

输入输出格式

输入格式

第一行一个整数 N 。 第二到 N+1 行:第 i+1 行有一个整数 Ci。 第 N+2 行到 2*N 行:第 i+N+1 行为 3 个整数:Ai,Bi 和 Li。

输出格式

一行一个整数,表示最小的不方便值。

输入输出样例

输入样例 #1

5 
1 
1 
0 
0 
2 
1 3 1 
2 3 2 
3 4 3 
4 5 3

输出样例 #1

15

说明

1≤N≤105,1≤Ai≤Bi≤N,0≤Ci,Li≤1000。

思路

读题下来

相当于就是求在一棵无根树中找一个根节点,使得所有点的深度之和最小

即换根DP

注意,跟[POI2008] STA-Station不同的是,在算深度的时候,要乘上当前节点的奶牛数。

递推公式:跟[POI2008] STA-Station一样,不过这里dx的定义有一点点不同

我们可以在第一个dfs中算出在以u为根节点的子树的深度之和,即子树中所有子节点到u的深度之和

还是用两个dfs

第一次,以1为根节点计算一次

第二次计算偏移后的值

最后计算最小值

求出答案

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=200100;
ll d[N],c[N],tot[N],f[N],h[N];
ll sum,ans=0x3f,cnt=0,n;
struct Node {
    ll v,nxt,w;
} tr[N];
void dfsa(ll u,ll fa) {
    ll cnt=0;
    for(ll i=h[u]; i; i=tr[i].nxt) {
        ll v=tr[i].v;
        if(v!=fa) {
            ll s=dfsa(v,u);
            d[u]+=d[v]+tr[i].w*s;
            cnt+=s;
        }
    }
    tot[u]=cnt+c[u];
}
void dfsb(ll u,ll fa) {
    for(ll i=h[u]; i; i=tr[i].nxt) {
        ll v=tr[i].v;
        if(v!=fa) {
            ll w=tr[i].w;
            f[v]=f[u]-tot[v]*w+(sum-tot[v])*w;
            dfsb(v,u);
        }
    }
}
void add(int u,int v){
    tr[++cnt].to=v;
    tr[cnt].nxt=hd[u];
    hd[u]=cnt;
}
int main() {
    scanf("%d",&n);
    for(ll i=1; i<=n; ++i) {
        scanf("%d",&c[i]);
        sum+=c[i];
    }
    for(ll i=1; i<n; ++i) {
        scafn("%lld%lld%lld",&u,&v,&w);
        ans(u,v,w);
        ans(v,u,w);
    }
    dfsa(1,1);
    dfsb(1,1);
    for(ll i=1; i<=n; ++i){
        ans=min(ans,f[i]);
    }
    printf("%ll,ans+d[1]);
    return 0;
}

完结撒花❀

*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

[洛谷 P2986 USACO10MAR] Great Cow Gathering G (换根dp 经典) [洛谷 P2986 USACO10MAR] Great Cow Gathering G 题目链接 大致题意: 有一颗树,你可以选定一个根节点,这个根节点的代价是∑c[i]∗dis[i],c[i]表示点i的点权值,dis[i]表示点i到根节点的距离 解题思路: 二次扫描换根法 操作1: 先处理出以1为根节点的时候的代价 定义状态方程: f[i]表示i子树中所有点到i的代价 转移方程:f[u] += f[v] + w * cnt[v] (cnt[i]表示i的子树中所有点权和) 操作2: 重新定义状态方程 阅读详情

相关推荐

超分算法 SwinIR: Image Restoration Using Swin Transformer

这篇文章结构比较简单,如果看过Swin-Transformer的话就没什么难点了。作者引入Swin-T结构应用于低级视觉任务,包括图像超分辨率重建、图像去噪、图像压缩伪影去除。网络由一个浅层特征提取模块、深层特征提取模块、重建模块构成。重建模块对不同的任务使用不同的结构。浅层特征提取就是一个3×3的卷积层。深层特征提取是k个RSTB块和一个卷积层构成。RSTB(Res- SwinIR: Image Restoration Using Swin Transformer[ICCV 2021]Abstract1.

qq_45122568的博客 1万+

洛谷·bzoj·伟大的奶牛聚集Great Cow Gather

初见安~~这里是传送门:洛谷P2986& bzoj P1827 题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of course, she would like to choose the most convenient location for ...

樱狸✨愿携清风归来处 571

简单说说Python中的pip如何换源

【安装包】:pip install 【升级包】:pip install --upgrade 【卸载包】:pip uninstall 【查看已安装的包】:pip list【搜索包】:pip search (注意:pip search功能在pip 10.0.0之后被弃用,建议使用其他方式搜索包,如访问PyPI官网或使用其他搜索引擎)

一捌柒的博客 2666

[USACO10MAR] Great Cow Gathering G

[USACO10MAR] Great Cow Gathering G

skyflying266的博客 337

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 194

PyTorch实战(26)——PyTorch分布式训练

在本节中,我们将探讨如何通过跨机器和机器内多进程的分布式训练来加速模型训练过程。我们将系统学习 PyTorch 提供的三大分布式训练 API——torch.distributed、torch.multiprocessing 以及 torch.utils.data.distributed.DistributedSampler,使用这些 API 能够极大的简化分布式训练,介绍如何使用 PyTorch 的分布式训练工具,在 CPU 和 GPU 上加速训练。

盼小辉丶的博客 3786

【洛谷】【P2986】Great Cow Gathering G(树形DP)

传送门:Great Cow Gathering G 树形DPBessie 正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 NN 个农场中的一个,这些农场由 N−1N−1 条道路连接,并且从任意一个农场都能够到达另外一个农场。道路 ii 连接农场 AiAi​ 和 BiBi​,长度为 LiLi​。集会可以在 NN 个农场中的任意一个举行。另外,每个牛棚中居住着 CiCi​ 只奶牛。在选择集会的地点的时候,Bessie 希

2301_80024649的博客 1296

scratch绘制四个三角形 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

​ scratch绘制四个三角形 一、题目要求 2024年6月电子学会图形化编程Scratch等级考试二级真题 1、准备工作 1.保留默认角色小猫; 2.添加背景Stars。 2、功能实现 1 .隐藏角色小猫,设置画笔裙始位置为(0,0),画笔颜色为黄色,画笔的粗细为5; 2. 点击绿旗,绘制如下图所示图形,三角形的边长为50。 二、案例分析 1、角色分析 角色:小猫 2、背景分析 背景:Stars背景 3、前期准备 1. 保留默认的小猫不变 ​

青少年编程学习指导 1716

题解 | #[USACO 2010 Mar G]Great Cow Gathering#

经过了校内培训后,我学到了数组,函数,结构体和离散化等,这写才能体现计算机的快捷优势。cpper友友们,给个建议招银网络,base深圳,白菜价,10号前就要签了,感觉奖金占太大比例了京东,base北京,hr面已完成,不是很想去北京,但ta又是东子。#offer决赛圈,我是怎么选的# #晒一晒我的offer# 机械制造薪资爆料# 各位大佬不吝赐教,本人安徽合肥人,算是offer决赛圈了。八月九月忙了一个多月了,不是在投简历做测评,就是在去面试的路上,自己的小论文和实验都还没弄完,再整下去都不能毕业了,累。

每天多一点干货 124

OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队

OpenClaw多Agent模式为企业提供高效的AI助手团队解决方案。通过创建4个独立的飞书机器人(主助理、内容创作、技术开发、AI资讯),每个连接专属Gateway和Agent模型(如Claude Opus/Sonnet、Gemini 2.5),实现专业分工。相比单Agent模式,多Gateway架构具有配置清晰、互不干扰、无需手动切换等优势。系统采用Profile隔离机制,各Agent拥有独立配置和端口。部署过程包括创建机器人应用、配置Agent、运行自动化脚本等步骤,支持私聊或群组@使用。日常提供状态

Maynor的博客 5096

有限元之有限元空间的构造

主要介绍有限元的空间构造方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 762

【洛谷2986】【USACO10MAR】伟大的奶牛聚集

题面题目描述Bessie is planning the annual Great Cow Gathering for cows all across the country and, of course, she would like to choose the most convenient location for the gathering to take place.Each cow li

小蒟蒻yyb的博客 711

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

随着科学技术的不断更新和社会文明的不断进步,汽车已经走入寻常百姓家, 成为当代社会必不可少的交通工具。伴随着互联网技术的飞速发展,汽车也不再 是一个简单的交通工具,已经逐渐发展成为一个集出行、通信、娱乐等功能于一 身的综合智能体,进而推动了车联网产业的蓬勃发展。车联网是在传统汽车的框架上安装了传感器、执行器、控制器等分布式和集 中式控制器,使汽车具备环境感知、协同控制、优化执行等功能,并通过网络技 术实现与车外环境的信息共享,给驾驶带来方便的同时也终将成为可以替代人操 作的新一代汽车[1-3]。

getusushu的博客 2590

洛谷 P2986 [USACO10MAR] Great Cow Gathering G(树形dp)

洛谷P2986 [USACO10MAR] Great Cow Gathering G 有$n$个农场,每个农场相互可以到达(联通),有$n-1$条路连接这$n$个农场。每条路对应的有其长度$L_i$,然后每个农场有若干头牛$C_i$。 现在要选择一个农场,并让所有牛都去,求再哪个农场举办能使得所有牛移动距离最小?输出最小的移动距离总和。

鱼香rose_的博客 851

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[USACO10MAR]Great Cow Gathering G (换根dp入门)

本题思路和 这题 是一样的, 只不过加了边权和点权。我们需要再开一个记录点权的数组, 用sum记录点权总和 换根过程:dp[child=dp[rt]+w*(sum-2*size[child]) w为rt 、child的边权,size[i]表示以i为根的树的总点权。 //#pragma comment(linker, "/STACK:102400000,102400000")//手动扩栈 #include<iostream> #include<algorithm> #includ.

矮纸斜行闲作草 356

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[USACO10MAR]Great Cow Gathering G

题目 题目描述 Bessie 正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。 每个奶牛居住在 NN 个农场中的一个,这些农场由 N-1N−1 条道路连接,并且从任意一个农场都能够到达另外一个农场。道路 ii 连接农场 A_iA i ​ 和 B_iB i ​ ,长度为 L_iL i ​ 。集会可以在 NN 个农场中的任意一个举行。...

Brute♂force 449

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷P2986 [USACO10MAR] Great Cow Gathering G题解

比如从农场k换到它的子节点v,原来v子树里的奶牛都少走了w的距离,其他奶牛都多走了w,所以总路程dp[v] = dp[k] - sz[v]*w + (总奶牛数 - sz[v])*w。第一次dfs选1号农场当根,计算每个农场到根的距离,顺便算出所有奶牛到1号农场的总路程sum,还有每个农场子树里的奶牛总数sz。在选择集会的地点的时候,Bessie 希望最大化方便的程度(也就是最小化不方便程度)。个农场作为集会地点,它的不方便程度是其它牛棚中每只奶牛去参加集会所走的路程之和(比如,农场。

aierxiang的博客 686

[USACO10MAR] Great Cow Gathering G(洛谷P2986)

【代码】[USACO10MAR] Great Cow Gathering G(洛谷P2986)

GordrnGhost的博客 299

【树形dp】P2986 [USACO10MAR]Great Cow Gathering G

和上一题的换根树形dp类似,这道就是加上了边权,仍是两次dfs即可 但是这个题的输出会很大,ans初值要赋的大一点(要不然最后两个点会wa) 代码 #include<bits/stdc++.h> using namespace std; const int maxn=5e5+5; long long n,cnt,head[maxn]; long long c[maxn],tot,dis[maxn],f[maxn],size[maxn],ans=100000000000...

andyc_03的博客 261

洛谷--P2986 [USACO10MAR] Great Cow Gathering G

比如选择第 X 个农场作为集会地点,它的不方便程度是其它牛棚中每只奶牛去参加集会所走的路程之和(比如,农场 i 到达农场 X 的距离是 20,那么总路程就是 Ci×20)。每个奶牛居住在 NN 个农场中的一个,这些农场由 N−1N−1 条道路连接,并且从任意一个农场都能够到达另外一个农场。本题第一次dfs计算出以1为根节点的总距离d[1],第二次利用d[v]=d[u]-siz[v]*w+(cnt-siz[v])*w推导其他点i为根节点的总距离d[i],进行比较得到最终答案。主要结合换根法得到最优解。

2301_79070220的博客 394

P2986 [USACO10MAR] Great Cow Gathering G (学学换根dp)

题目 题意: 给定n个点的树,每个点有对应的点权。选中一个点,满足所有点到其的点权*距离之和最小,输出对应的最小值。 思路: 还是最基础的换根dp,只不过和上一个题相比多了边权和点权,注意边权不是1就行。 时间复杂度: O(n) 代码: // Problem: P2986 [USACO10MAR] Great Cow Gathering G // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P2986 // Memory Limit: 12

xianqiuyigedao的博客 602

USACO 2010 Mar Gold 1.Great Cow Gathering 树形dp

树形DP

独立团团长李云龙 780

P2986 [USACO10MAR] Great Cow Gathering G(换根dp)

怎么说,就是让你求出一个点的解之后,根据解和解之间的父子关系(主要是兄弟的信息合并到父亲身上了),然后更新儿子的一类dp。常常求出根的dp,再用根的dp值更新儿子。考虑换根dp,虽然我们并不知道哪个点最优,但我们仍然能求解出以一个点为集合点的时候,其他点到这个集合点时的答案。为根,先求出其他点到1的答案是多少.以及1为根时的子树大小,对应的路径贡献。然后,我们考虑利用求出来的这个点,维护父子关系,从而求出一个表。思路:这题有一个树形dp中比较明显的特征.接下来考虑换根dp。为集合点时,其他点到它的路径和。.

qq_36018057的博客 373

《P2986 [USACO10MAR] Great Cow Gathering G》

摘要:本文描述了一个关于在树形结构的农场网络中寻找最优集会地点的问题。给定N个农场构成的树,每个农场有Ci头奶牛,道路有长度Li。要求选择一个农场X,使所有奶牛到X的总路程和最小。解题思路是通过两次深度优先搜索:第一次计算以节点1为根时各子树的总奶牛数和距离和,第二次利用动态规划思想计算其他节点作为根时的总距离。算法时间复杂度为O(N),适用于大规模数据(1≤N≤10^5)。关键点在于通过父子节点间的关系转移计算结果,避免重复计算。最终输出最小总路程值。

Jasmine_llq的博客 366

P2986 [USACO10MAR]Great Cow Gathering G(换根dp)

题目传送门 本题是这题的延伸。 题意: 有一颗树,你可以选定一个根节点,这个根节点的代价是∑c[i]∗dis[i]\sum c[i]*dis[i]∑c[i]∗dis[i],c[i]c[i]c[i]表示点i的点权值,dis[i]dis[i]dis[i]表示点i到根节点的距离。 思路: 先处理出以1为根节点的时候的代价,然后再遍历这棵树,根据方程转移即可。 f[to]=f[x]−siz[i]∗dis(x,to)+(totc[i]−siz[i])∗dis(x,to)f[to]=f[x]-siz[i]*dis(x

Joker_He的博客 381
上一篇: 二分与三分
下一篇: 浅谈 容斥
_Youngyx
博客等级 码龄5年 10粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值