P8602 [蓝桥杯 2013 省 A] 大臣的旅费【树的直径】

P8602 [蓝桥杯 2013 省 A] 大臣的旅费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

cpp 复制代码
#include<iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define int long long
const int N=5e5+100;
int n;
int res=0;
typedef pair<int,int>pii;
vector<pii>g[N];
bool vis[N];
int len=0;
int dfs(int u)
{
    vis[u]=true;
    int d1=0;//d1记录的是u向下能走的最大长度
    int d2=0;//d2记录的是u向下能走的第二的长度
    for(auto i:g[u])
    {
        int v=i.first;
        int w=i.second;
        if(vis[v])//防止往回搜索
            continue;
        int d=dfs(v)+w;
        if(d>d1)//更新最大值与第二大值
            d2=d1,d1=d;
        else if(d>d2)
            d2=d;
    }
    len=max(len,d1+d2);//保存最大的数值
    return d1;//返回最长长度
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    cin>>n;
    for(int i=1;i<=n-1;i++)
    {
        int p,q,d;
        cin>>p>>q>>d;
        g[p].push_back((pii){q,d});
        g[q].push_back((pii){p,d});
    }
    dfs(1);//求树的直径,1是根节点
    int ans=0;
    for(int i=1;i<=len;i++)//计算答案
        ans+=10+i;
    cout<<ans;
    return 0;
}
相关推荐
Wang ruoxi5 分钟前
基于最小二乘法的离散数据拟合
人工智能·算法·机器学习
Xの哲學9 分钟前
Linux链路聚合深度解析: 从概念到内核实现
linux·服务器·算法·架构·边缘计算
加成BUFF14 分钟前
C++入门讲解3:数组与指针全面详解
开发语言·c++·算法·指针·数组
xiaoxue..18 分钟前
二叉树深度解析:从基础结构到实战应用
javascript·数据结构·面试
代码游侠24 分钟前
应用——管道与文件描述符
linux·服务器·c语言·学习·算法
一招定胜负26 分钟前
决策树开篇
算法·决策树·机器学习
GoWjw27 分钟前
C语言高级特性
c语言·开发语言·算法
carver w30 分钟前
说人话版 K-means 解析
算法·机器学习·kmeans
小O的算法实验室36 分钟前
2026年SEVC SCI2区,基于差分向量内学习策略的自适应指数交叉差分进化算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
天若有情67343 分钟前
我发明的PROTO_V4协议:一个让数据“穿上迷彩服”的发明(整数传输协议)
网络·c++·后端·安全·密码学·密码·数据