daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)

简介: daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)

题目传送门

/*********************************************************************
    程序名:
    版权: Joecai
    作者: Joecai
    日期: 2022-04-14 19:16
    说明:
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
# define rep(i,be,en) for(int i=be;i<=en;i++)
# define pre(i,be,en) for(int i=be;i>=en;i--)
#define ll long long
#define endl "\n"
#define LOCAL
#define pb push_back
//#define int long long
typedef pair<ll, ll> PII;
#define eb emplace_back
#define sp(i) setprecision(i)
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
int n;
vector<int>g[N];
int  f[N][2][2];//以i为子树的最长路径和第二长路径 和他们的点
int v[N];//v[y] 记录了 y 号点的父亲 x 号点作为它的子树时从里面连上来的到 y 号点的最长路径
void dfs(int i, int fa)
{
  for (auto j : g[i])
  {
    if (j == fa) continue;
    dfs(j, i);
    if (f[j][0][0] + 1 > f[i][0][0])
    {
      f[i][1][0] = f[i][0][0], f[i][1][1] = f[i][0][1], f[i][0][0] = f[j][0][0] + 1, f[i][0][1] = j;
    } else if (f[j][0][0] + 1 > f[i][1][0])
    {
      f[i][1][1] = j, f[i][1][0] = f[j][0][0] + 1;
    }
  }
}
void dfs1(int i, int fa)
{
  for (auto j : g[i])
  {
    if (j == fa) continue;
    if (f[i][0][1] == j)
    {
      v[j] = 1 + max(f[i][1][0], v[i]);
    } else
    {
      v[j] = 1 + max(f[i][0][0], v[i]);
    }
    dfs1(j, i);
  }
}
void solve()
{
  cin >> n;
  for (int i = 1; i <= n - 1; i++)
  {
    int x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1, 0);
  dfs1(1, 0);
  for (int i = 1; i <= n; i++)
  {
    cout << f[i][1][0] + f[i][0][0] + v[i] - min({f[i][1][0], f[i][0][0], v[i]}) << endl;;
  }
}
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //#ifdef LOCAL
  //freopen("data.in.txt","r",stdin);
  //freopen("data.out.txt","w",stdout);
  //#endif
  int __ = 1;
  //cin>>__;
  while (__--)
  {
    solve();
  }
  return 0;
}


目录
相关文章
|
7月前
|
数据可视化 安全 数据挖掘
【无人机任务分配】三维山地地形生成+随机任务点采样+K-means 任务聚类 +任务点排序的无人机航迹规划附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 一、核心痛点:山地环境无人机任务分配与航迹规划的挑战 无人机在山地场景(如测绘、巡检、搜救)中执行多任务点作业时,面临四大核心挑战: 地形复杂性:山地海拔起伏剧烈、坡度变化大,需避免撞山,同时保证飞行稳定性; 任务点分散:多任务点随机分布在三维空间,直接按顺序航行导致航迹冗长
234 1
|
供应链 搜索推荐 API
1688商品类目API接口的开发应用与收益
1688平台作为全球领先的B2B在线交易市场,提供了丰富的API接口,助力企业高效获取商品信息、优化供应链管理。本文聚焦1688商品类目API接口的开发应用,涵盖接口概述、环境配置、Python代码示例及实际案例,展示其为企业带来的显著收益,如提升运营效率、优化市场策略、降低成本和增强用户体验。通过合理调用API,企业可大幅提升竞争力。
614 7
|
算法 Java 计算机视觉
图像处理之泛洪填充算法(Flood Fill Algorithm)
图像处理之泛洪填充算法(Flood Fill Algorithm)
1275 6
|
机器学习/深度学习 自然语言处理 算法
nlp文本提取关键词
8月更文挑战第21天
1081 0
|
安全 项目管理 数据库
"揭开Dify社区版神秘面纱:一键部署,体验开源项目管理的革命性突破!"
【8月更文挑战第20天】Dify社区版是一款开源项目管理工具,集成任务跟踪、文档协作等功能,助力团队高效协作。本文引导快速部署体验。需Linux服务器,安装Docker及Docker Compose,并能访问GitHub。从GitHub克隆源码,配置`docker-compose.yml`如数据库设置,运行`docker-compose up -d`启动服务。通过`http://&lt;服务器IP&gt;`访问Web界面,建议配置HTTPS增强安全。定期`git pull`及`docker-compose`命令实现维护升级。Dify以其实用性和灵活性,正成为项目管理领域的新兴力量。
2908 1
|
存储 监控 JavaScript
NUS CS1101S:SICP JavaScript 描述:五、使用寄存器机进行计算(2)
NUS CS1101S:SICP JavaScript 描述:五、使用寄存器机进行计算(2)
241 1
|
存储 数据可视化 定位技术
Python中matplotlib为多个列表数据绘制小提琴图
Python中matplotlib为多个列表数据绘制小提琴图
410 1
|
JSON 前端开发 JavaScript
【前端】使用jQuery实现一个简单的在线页面或API接口请求功能
对于测试人员来说,借助一些测试工具非常的重要,像postman等工具,很方便就能发起api接口的请求和测试 但是,对于开发人员来说,有时候未必一开始就使用这些工具,有可能电脑原因未安装到这些工具或者太麻烦 基于这样一个情况,本篇文章就来简单实现下在线页面发起http的get或post请求的功能 作者:全栈小5 链接:https://juejin.cn/post/7107132057263800327 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

热门文章

最新文章