【蓝桥】串门

news2024/9/20 14:59:32

1、题目

问题描述

过年小蓝想要回家串门。

蓝桥村可以抽象为 n n n 个节点, n − 1 n-1 n1 条边的一棵树,每条边有边权长度 w i w_i wi

小蓝可以选择任意一个点作为起点,然后选择一条路径,可以访问每个节点至少一次。他想知道最短的路径长度是多少。

输入格式

第一行输入一个整数 n n n,表示节点数量。

接下来 n − 1 n-1 n1 行,每行三个整数 v i , u i , w i v_i, u_i, w_i vi,ui,wi,表示 ( v i , u i ) (v_i, u_i) (vi,ui) 存在一条 w i w_i wi 的边。

输出格式

输出一个整数,表示最短路径。

样例输入

4
1 2 3
1 3 4
1 4 5

样例输出

15

说明

路径为:4->1->2->1->3,即在这里插入图片描述,路径和值为 15。

数据范围

  • 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105
  • 1 ≤ v i , u i ≤ n 1 \le v_i, u_i \le n 1vi,uin
  • 1 ≤ w i ≤ 1 0 9 1\le w_i \le 10^9 1wi109
  • 保证数据输入是一棵树

原题链接

串门

2、思路

考察图论,树的性质。

由于每个点需要访问至少一次,我们可以选择任意点作为起点和终点,考虑枚举起点和终点,然后在满足起点终点的情况下访问每个节点至少一次的最短路。

结合dfs回溯的知识和欧拉路的知识可以得到一个结论。

  1. 从起点到终点的最短路上的边,只需要经过一次。
  2. 其他边,都需要至少两次。

利用容斥,假设每条边都需要访问两次,那么减去只访问一次的,就是结果。

所以实际上就是求树的直径

用两遍DFS 或者 换根DP 都行。
在这里插入图片描述
如上图示例,为了从起点1 到 终点 4,进行深搜,点6,7和5 的边都要走两次,如2到6之后要从6返回2,然后才能继续往下走,其他边都走一次。从1->2->3->4 就是最长的一条路径,也就是树的直径。除了直径,其他的边都要访问两次。

时间复杂度: O ( n ) O(n) O(n)

3、代码

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#include <assert.h>

using namespace std;

typedef long long ll;
const int N = 1e5+100;
const int MOD = 998244353;

typedef pair<int, int> Pair;

vector<Pair> G[N];
int n;
ll ans = 0;

ll dfs(int u, int f) {
    vector<ll> tw(0);
    for (Pair v : G[u]) {
        if (v.first == f) continue;
        ll t = dfs(v.first, u) + v.second;
        tw.push_back(t);
    }
    sort(tw.begin(), tw.end());
    int sz = tw.size();
    if (sz > 0)
        ans = max(ans, tw[sz - 1]);
    if (sz > 1)
        ans = max(ans, tw[sz - 1] + tw[sz - 2]);
    ll t = 0;
    if (sz > 0) t = tw[sz - 1];
    return t;
}

void sol() {
    int v, u, w;
    cin >> n;
    ll res = 0;
    for (int i = 1; i < n; ++i) {
        cin >> v >> u >> w;
        G[v].push_back({u, w});
        G[u].push_back({v, w});
        res += w;
    }
    res *= 2;
    dfs(1, 0);
    cout << res - ans << endl;
}

int main() {
    sol();
    exit(0);
}

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#include <assert.h>

using namespace std;

typedef long long ll;
const int N = 1e5+100;
const int MOD = 998244353;

typedef pair<int, int> Pair;

vector<Pair> G[N];
int n;
ll ans = 0;
ll tg;

void dfs(int u, int f, ll dep) {
    if (dep > ans) {
        ans = dep;
        tg = u;
    }
    for (Pair v : G[u]) {
        if (v.first == f) continue;
        dfs(v.first, u, dep + v.second);
    }
}

void sol() {
    int v, u, w;
    cin >> n;
    ll res = 0;
    for (int i = 1; i < n; ++i) {
        cin >> v >> u >> w;
        G[v].push_back({u, w});
        G[u].push_back({v, w});
        res += w;
    }
    res *= 2;
    dfs(1, 0, 0);
    ans = 0;
    dfs(tg, 0, 0);
    cout << res - ans << '\n';
}

int main() {
    sol();
    exit(0);
}

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

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

相关文章

使用vue3从零开始手撸一个后台管理架子。代码开源

毒蘑菇 - 管理 毒蘑菇 - 管理 开源地址 https://github.com/wurencaideli/dumogu-admin 线上DEMO https://admin.dumogu.top/ 吐槽地址 https://txc.qq.com/products/613546 包含后端服务&#xff0c;前端。前端采用vue3&#xff0c;vite&#xff0c;element-plus&#xff0…

详解接近传感芯片的工作原理及应用领域

接近传感芯片是代替限位开关等接触式检测方式&#xff0c;以无需接触检测对象进行检测为目的的传感器的总称。能检测对象的移动信息和存在信息转换为电气信号。在换为电气信号的检测方式中&#xff0c;包括利用电磁感应引起的检测对象的金属体中产生的涡电流的方式、捕测体的接…

初识Java 之 入门篇(新手必看)

博主回归学习状态的第二篇文章&#xff0c;希望对大家有所帮助 今日份励志文案:我愿用努力去弥补&#xff0c;跟别人天赋的差距 大家一起加油&#xff01;&#xff01;&#xff01;&#xff01; 目录 一.初识Java 二.编写和运行第一给Java程序时&#xff0c;可能会遇到的一些…

做自媒体一定要知道这个配音软件~

我们生活在一个飞速发展、变化多端的时代&#xff0c;科技不断创新&#xff0c;信息更新迅速。在这样一个时代里&#xff0c;许多年轻人选择投身短视频和自媒体行业。无论是专注于自媒体&#xff0c;还是副业分享业余时间记录生活的Vlog&#xff0c;都需要涉及视频配音和制作方…

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点&#xff1a;快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1&#xff1a;不同类型字段导出Sample2&#xff1a;…

CleanMyMac X破解许可证2023最新

Mac OS已经成为许多人的选择。作为苹果&#xff08;Apple&#xff09;公司独有的操作系统&#xff0c;Mac OS以其稳定性、安全性和用户友好性而闻名于世。本文将带你了解Mac OS是什么系统&#xff0c;有什么特点和优势&#xff0c;帮助读者全面了解这一操作系统&#xff0c;并为…

优化改进 | YOLOv2算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv2是YOLO&#xff08;You Only Look Once&#xff09;目标检测算法的第二个版本&#xff0c;它在YOLOv1的基础上做了很多改进&#xff0c;包括使用更深的卷积神经网络Darknet-19作为特征提取器、使用Batch Normalizati…

Kubernetes 的有状态和无状态服务

Author&#xff1a;rab 目录 前言一、无状态服务案例1.1 yml 案例1.2 扩容与缩容1.2.1 扩容1.2.2 缩容 1.3 暂停与恢复1.3.1 暂停1.3.2 恢复 1.4 回滚 二、有状态服务案例2.1 yml 案例2.2 扩容与缩容2.2.1 扩容2.2.2 缩容 总结 前言 在 Kubernetes&#xff08;k8s&#xff09;…

C语言找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

完整代码&#xff1a; /*找出一个二维数组中的鞍点&#xff0c;即该位置上的元素在该行上最大&#xff0c;在该列上最小&#xff0c;也可能 没有鞍点*/ #include<stdio.h> #include<stdlib.h> int main(){int n0;printf("请输入矩阵的行数:");scanf(&qu…

中国区域2013-2021年森林地上生物量产品

该数据集包括中国陆地区域2013-2021年30m分辨率森林地上生物量产品。每年的产品存放在以年份数字命名的文件夹中&#xff0c;有2013-2021共9个文件夹。 每个文件夹内包括分块的产品和vrt文件。 产品命名方式为分区名年份数字.tif。 不同的分区名称如下&#xff1a; cold te…

第2篇 机器学习基础 —(1)机器学习概念和方式

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习是一种人工智能的分支&#xff0c;它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进&#xff0c;而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律&#xff0c;从而使计算机能够自动进…

高速公路安全监测预警系统的功能优势

实时监测和预警&#xff1a;高速公路安全监测预警系统能够实时监测高速公路的路基、桥梁、隧道等结构的位移变化情况&#xff0c;并通过数据分析及时发出预警&#xff0c;有效预防和减少交通事故的发生。 高精度测量&#xff1a;高速公路安全监测预警系统能够实现高精度的位移…

光影之梦2:动画渲染前后对比,揭示视觉艺术的惊人转变!

动画渲染是影视艺术中不可或缺的一环&#xff0c;它赋予了角色和场景鲜活的生命。渲染过程中的光影、色彩、材质等元素&#xff0c;像是画家的调色板&#xff0c;将平淡无奇的线条和形状转化为充满韵味与情感的画面。动画角色仿佛拥有了自己的灵魂&#xff0c;无论是一颦一笑&a…

C# Winform编程(8)GDI+绘图

GDI绘图 简介System.Drawing命名空间System.Drawing命名空间中的常用类&#xff1a;System.Drawing命名空间中的常用结构&#xff1a; Graphics 类Pen类Brush类Font类PictureBox图像控件Bitmap类 简介 GDI(Graphics Device Interface)图像设备接口&#xff0c;属于绘图方面的A…

进阶课3——神经网络

1.定义与分类 神经网络是一种模仿动物神经网络行为特征&#xff0c;进行分布式并行信息处理的算法数学模型。它由大量的节点&#xff08;或神经元&#xff09;相互关联而成&#xff0c;每个节点代表一种特定的输出函数&#xff08;或称为运算&#xff09;&#xff0c;称为激励…

高等数学啃书汇总重难点(七)微分方程

同济高数上册的最后一章&#xff0c;总的来说&#xff0c;这篇章内容依旧是偏记忆为主&#xff0c;说难不难说简单不简单&#xff1a; 简单的是题型比较死&#xff0c;基本上就是记公式&#xff0c;不会出现不定积分一般花样繁多的情况&#xff1b;然而也就是背公式并不是想的…

Java-枚举

文章目录 枚举使用优缺点 方法 枚举 Java中的枚举是一种特殊的类&#xff0c;它用于定义一组有限的常量。 枚举在Java中被视为数据类型&#xff0c;你可以使用它们来创建枚举类型的变量&#xff0c;然后使用那些变量等。 枚举类使用enum关键字进行定义。 例如&#xff1a;在…

一篇了解springboot3请求参数种类及接口测试

SpringBoot3数据请求&#xff1a; 原始数据请求&#xff1a; //原始方式RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParameter("name");String age request.getParam…

我的前端笔记

HTML ./当前文件夹 ../返回上一级 ../../返回上上级 如果点击链接需要在新标签中打开<a href"#" target"_blank"> 网页中音频和视频都是默认不会自动播放的&#xff0c;视频得配合muted&#xff08;静音&#xff09;和autoplay配合使用 无语义…