当前位置: 首页 > article >正文

#Z0458. 树的中心2

题目

 代码

#include <bits/stdc++.h>
using namespace std;
struct ff
{
  int z,len;
};
vector<ff> vec[300001];
int n,u,v,w,dp[300001][2],ans = 1e9;
void dfs(int x,int fa)
{
  for(int i = 0;i < vec[x].size();i++)
  {
    ff son = vec[x][i];
    if(son.z != fa)
    {
      dfs(son.z,x);
      int t = dp[son.z][0] + son.len;
      if(t > dp[x][0]) swap(t,dp[x][0]);
      if(t > dp[x][1]) swap(t,dp[x][1]);
    }
  }
}
void dfss(int x,int fa)
{
  for(int i = 0;i < vec[x].size();i++)
  {
    ff son = vec[x][i];
    if(son.z != fa)
    {
      int t;
      if(dp[x][0] == dp[son.z][0] + son.len) t = dp[x][1] + son.len;
      else t = dp[x][0] + son.len;
      if(t > dp[son.z][0]) swap(t,dp[son.z][0]);
      if(t > dp[son.z][1]) swap(t,dp[son.z][1]);
      dfss(son.z,x);
    }
  }
}
int main()
{
  cin>>n;
  for(int i = 1;i < n;i++)
  {
    cin>>u>>v>>w;
    vec[u].push_back({v,w});
    vec[v].push_back({u,w});
  }
  dfs(1,0);
  dfss(1,0);
  for(int i = 1;i <= n;i++) ans = min(ans,dp[i][0]);
  for(int i = 1;i <= n;i++)
    if(ans == dp[i][0])
      cout<<i<<' ';  
  return 0;
}


http://www.kler.cn/a/229288.html

相关文章:

  • [AI部署-tensorRT] customlayer定义添加过程解析
  • 学成在线_内容管理模块_创建模块工程
  • 【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)
  • 华为数通HCIE备考经验分享
  • 活动预告 | CCF开源发展委员会开源供应链安全技术研讨会(2025第一期)——“大模型时代的开源供应链安全风控技术”...
  • 基于springboot+vue的洪涝灾害应急信息管理系统设计与实现
  • 解决跨域问题8种方法,含网关、Nginx和SpringBoot~
  • 【数据结构与算法】之排序系列-20240205
  • 人工智能之大数定理和中心极限定理
  • Java中SQL注入的防范与解决方法
  • OpenCV 图像处理六(傅里叶变换、模板匹配与霍夫变换)
  • ubuntu22.04@laptop OpenCV Get Started: 000_hello_opencv
  • HomeAssistant系统添加HACS插件商店与远程控制家中智能家居
  • LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】
  • Webpack插件浅析
  • 用 Delphi 程序调用 Python 代码画曲线图 -- 数据来自 Delphi 程序
  • OpenHarmony开源鸿蒙开发之旅
  • python+flask人口普查数据的应用研究及实现django
  • R语言:箱线图绘制(添加平均值趋势线)
  • 序列化和反序列化、pytest-DDT数据驱动
  • threejs之常用贴图
  • vite+vue3发布自己的npm组件+工具函数
  • 【C/C++】C/C++编程——整型(二)
  • 【Java】new Date()的取值
  • 16.docker删除redis缓存数据、redis常用基本命令
  • 无线传输标准协议