洛谷 P1131 [ZJOI2007] 时态同步

news2025/1/12 1:40:51

思路:树形DP

这道题总的来说有点贪心的味道,贪心在我们需要把这个时间点加到哪一条边上。

借用一下一位洛谷大佬的图:

其实这样看出来,如果说越靠近根的那条边加长,其实价值最小,所以我们需要尽量向靠近根的地方加时间点。

这样的话,我们可以首先求出来距离根结点最深的那个叶节点,用dp数组当作更新距离的数组,

我们直接dp[i] =max(dp[i],dp[son]+w[son])其实也就是这个样子。这个时候我们就找到了距离根节点的最长距离。

然后,我们就从根节点开始,对于每一条边进行更新,也就是dp[u]-(dp[son]+w[son])这样就可以了。作者写的w数组是二维的,因为如果设置一维的话并不知道是哪一个结点有权值。大家可以仿照别的题解写一下图的存储,这里只是提供一种思路和稍微简单的暴力思路。

注意:由于我们已经求出来每一个结点距离最下面的叶结点的最长距离了,所以我们没必要一次次判断最大值,直接在最后累加就行了。所以才会有counts+=....而不是一步一步再去判断最小价值。

上代码:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<deque>
#include <iomanip>
#include<sstream>
#include<numeric>
#include<map>
#include<limits.h>
#include<unordered_map>
#include<set>
#define int long long
#define MAX 9999
#define inf 0x3f3f3f3f
#define _for(i,a,b) for(int i=a;i<(b);i++)
using namespace std;
typedef pair<int, int> PII;
int n, m;
int counts;
int dx[] = { 0,1,0,-1};
int dy[] = { 1,0,-1,0 };
vector<int>vec[MAX];
int dp[MAX];
int w[MAX][MAX];
int top[MAX];
void dfs(int u,int fa) {
    for (int i = 0; i < vec[u].size(); i++) {
        int son = vec[u][i];
        if (son == fa)continue;
        dfs(son, u);
        dp[u] = max(dp[u], dp[son] + w[u][son]);
    }
    for (int i = 0; i < vec[u].size(); i++) {
        int son = vec[u][i];
        if (son == fa)continue;
        counts += dp[u] - (dp[son] + w[u][son]);
    }
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    cin >> n;
    cin >> m;
    for (int i = 0; i < n-1; i++) {
        int a, b, t;
        cin >> a >> b >> t;
        vec[a].push_back(b);
        vec[b].push_back(a);
        w[a][b] = t;
        w[b][a] = t;
    }
    dfs(m, 0);
    cout << counts;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AbstractQueuedSynchronizer 源码解析

AbstractQueuedSynchronizer 源码解析 文章目录 AbstractQueuedSynchronizer 源码解析一、CAS二、字段分析三、内部类 Node1、CLH 队列2、源码分析 四、内部类 ConditionObject1、字段分析2、方法分析1、await2、signal 五、方法分析1、独占式下的 AQS1、acquire 独占式获取资源…

14.基础乐理-音级、基本音级、变化音级

音级&#xff1a; 乐音体系中的每一个音&#xff0c;都叫 音级。 基本音级&#xff1a; 基本音级是 CDEFGAB 它们七个&#xff0c;在钢琴上使用白键展示的&#xff0c;没有任何升降号、没有任何重升重降号的。 变化音级&#xff1a; 除了 CDEFGAB 这七个音&#xff0c;都叫变化…

面向对象练习坦克大兵游戏

游戏玩家&#xff08;名称&#xff0c;生命值&#xff0c;等级&#xff09;&#xff0c;坦克&#xff0c;大兵类&#xff0c;玩家之间可以相互攻击&#xff0c;大兵拥有武器&#xff0c;用枪弹和反坦克炮弹&#xff0c;造成攻击不同&#xff0c;坦克攻击值固定&#xff0c;请设…

logisim 图解超前进位加法器原理解释

鄙人是视频作者&#xff0c;文件在视频简介的网盘链接。 找规律图解超前进位加法器与原理解释_哔哩哔哩_bilibili 一句话就是“把能导致进位到这个位置的情况全都穷举一遍。” 穷举情况看图中算式。 视频讲解比较啰嗦。

JavaFX--基础简介(1)

一、介绍 中文官网&#xff1a;JavaFX中文官方网站OpenJFX 是一个开源项目,用于桌面、移动端和嵌入式系统的下一代客户端应用程序平台。openjfx.cn是OpenJFX(JavaFX)的标准中文翻译网站&#xff0c;致力于方便开发者阅读官方文档和教程。https://openjfx.cn/ JavaFX 是一个开…

【一文配置好Python开发环境】Python创建虚拟环境,一键更换国内镜像源

一、使用Python自带的venv创建虚拟环境 首先&#xff0c;确保你的Python安装中包含了venv模块。你可以在命令行中运行以下命令来检查&#xff1a; python -m venv --help进入代码目录&#xff0c;创建一个新的虚拟环境。在命令行中运行以下命令&#xff1a; python -m venv …

Llama 3王者归来,可与GPT-4分庭抗礼,开源模型即将追上闭源模型了?

“有史以来最强大的开源大模型”Llama 3引爆AI圈&#xff0c;马斯克点赞&#xff0c;英伟达高级科学家Jim Fan直言&#xff0c;Llama 3将成为AI大模型发展历程的“分水岭”&#xff0c;AI顶尖专家吴恩达称Llama3是他收到的最好的礼物。 4月18日&#xff0c;AI圈再迎重磅消息&a…

ubuntu22.04下编译ffmpeg和ffplay

Ubuntu22.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包 1.1 官方下载链接&#xff1a;Download FFmpeg 可以手动下载&#xff0c;也可以命令行下载&#xff1a; wget http://www.ffmpeg.org/releases/ffmpeg-7.0.tar.xz 1.2 下载完解压 tar -xvf ffmpeg-7.0.tar.xz…

X-314智能合约:金融创新的强大引擎

&#x1f4a5;火爆到烫手的X-314智能合约&#x1f525; X-314智能合约是基于以太坊区块链开发的&#xff0c;具有高度可定制性和灵活性。 ave开单独板块&#xff1b;详细资料已经准备好&#xff1b;对web3感兴趣的大佬货&#xff1b;多交流多指导&#x1f91d; ​X-314智能合…

新质生产力如何点燃乡村振兴之火?(2010-2022年)

数据来源&#xff1a;主要来源于《中国国统计年鉴》、《中国能源统计年鉴》、《中国农村统计年鉴》、《中国人口和就业统计年鉴》、《中国城乡建设统计年鉴》以及各省份统计年鉴。时间范围&#xff1a;2010-2022年数据范围&#xff1a;各省、市、自治区数据指标&#xff1a; 本…

web网站搭建实验

综合练习&#xff1a;请给openlab搭建web网站 网站需求&#xff1a; 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料 和缴费网站&#xff0c;基于&#xff0c;www.openlab.com/data网站…

贪吃蛇游戏源码(VS编译环境)

贪吃蛇游戏源码&#xff08;VS编译环境&#xff09; &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C语言&#x1f353; &#x1f33c;文章目录&#x1f33c; 1. Snake.h 头文件 2. Snake.c 源文件 3. Test.c 头文件 1. Snake.h 头…

云安全问题频发,我们能做什么

随着云计算技术的快速发展&#xff0c;云服务已广泛应用于各行各业&#xff0c;为企业提供了高效、灵活和可扩展的算力资源与服务。然而&#xff0c;向云迁移的最大挑战是需要改造企业现有的安全和网络架构&#xff0c;云安全作为保障云计算环境安全稳定运行的重要性愈加突显。…

[Java基础揉碎]泛型

目录 泛型的理解和好处 使用传统方法的问题分析 使用泛型 泛型介绍 泛型的语法 泛型的声明 泛型的注意事项和细节 自定义泛型类 ​编辑 自定义泛型接口 自定义泛型方法 泛型的继承和通配符 泛型的理解和好处 看一个需求 1)请编写程序&#xff0c;在ArrayList 中&a…

在IDEA中解决SSM项目修改图片不能回显问题

1.问题描述 图片成功上传之后&#xff0c;件夹中已经显示图片了&#xff0c;但是访问图片资源会出现404错误&#xff0c;再重新启动服务器之后&#xff0c;发现这个错误又消失了&#xff0c;图片又能正常显示&#xff0c;但是必须重启Tomcat才有效。 2.解决方法如下&#xff…

一台服务器同时启动两个版本jdk

之前Java项目都是1.8的jdk&#xff0c;在服务器部署正常使用&#xff0c;服务器配置环境变量jdk1.8版本。最近一次我用了jdk17版本&#xff0c;部署服务器后&#xff0c;遇见了jdk版本不一致报错 报错内容&#xff1a; 52指向jdk1.8,61指向jdk17&#xff0c;大概就是jdk版本不…

护眼台灯什么牌子好一点?专业做护眼灯的有哪些品牌?一文见分晓

护眼台灯什么牌子好一点&#xff1f;随着市场对护眼台灯需求的增加&#xff0c;一些质量低劣的产品也相继曝光&#xff0c;这让消费者们的担忧变得合情合理。选择一款合适的护眼台灯&#xff0c;不仅能够缓解眼睛疲劳&#xff0c;还能提升学习与工作的效率。那么现如今专业做护…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月20日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月20日 星期六 农历三月十二 1、 证监会&#xff1a;调降基金股票交易佣金费率&#xff0c;年度降幅测算将达38%&#xff0c;7月1日起实施。 2、 民政部举办全国“乡村著名行动”培训班&#xff0c;助力乡村振兴。 3、…

顺序表的应用—多指针算法

题目一 对于上面的题&#xff0c;有以下的两种思路 思路一&#xff1a; 定义一个顺序表&#xff0c;然后遍历数组&#xff0c;如果数组里面的元素等于val的值&#xff0c;就让这个值等于0就行了&#xff0c;然后输出的时候输出不是0的就行了 代码实现1 #include<stdio.h…

vscode如何方便地添加todo和管理todo

如果想在vscode中更加方便的添加和管理TODO标签&#xff0c;比如添加高亮提醒和查看哪里有TODO标签等&#xff0c;就可以通过安装插件快速实现。 安装插件 VSCode关于TODO使用人数最多的插件是TODO Height和Todo Tree 按住 CtrlShiftX按键进入应用扩展商店&#xff0c;输入to…