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;
}


目录
相关文章
|
算法 Python
Python OJ题典例:【信息奥赛一本通】地球人口承载力估计-T1005
本文介绍了地球人口承载力估计的问题,通过给定的资源量和年限,计算了地球最多能够养活的人口数量。是一道典型的算法例题。
1092 0
|
Linux C语言 Windows
Linux的基本指令(3)
Linux的基本指令(3)
177 1
|
前端开发 Ubuntu 开发工具
docker-compose快速部署LDAP
开发人员一般会用到很多开发软件,例如GIT,SonarQueb,minio,rancher等程序,这么多的程序,每个程序都有自己的一套账户系统和权限肯定是不合适的,作为用户来说,我们肯定是希望同一个账户能在多个软件中登录,就像一个微信号可以玩腾讯的所有游戏。作为管理员来说,肯定是希望前端开发,后端开发,测试人员的权限是分开的,在一个地方修改,所有软件的权限都能同步变更。那我们就采用了ldap的方式来快速部署试试吧。
1397 0
docker-compose快速部署LDAP
|
11月前
|
供应链 搜索推荐 API
1688商品类目API接口的开发应用与收益
1688平台作为全球领先的B2B在线交易市场,提供了丰富的API接口,助力企业高效获取商品信息、优化供应链管理。本文聚焦1688商品类目API接口的开发应用,涵盖接口概述、环境配置、Python代码示例及实际案例,展示其为企业带来的显著收益,如提升运营效率、优化市场策略、降低成本和增强用户体验。通过合理调用API,企业可大幅提升竞争力。
338 7
|
9月前
|
SQL
【YashanDB 知识库】YAS-04115 "SELECT" expected but missing
【YashanDB 知识库】YAS-04115 "SELECT" expected but missing
|
机器学习/深度学习 自然语言处理 算法
nlp文本提取关键词
8月更文挑战第21天
598 0
|
数据采集 自然语言处理 搜索推荐
淘宝评价API接口的开发与应用
在数字化商业时代,数据成为企业提升竞争力的关键资源。淘宝作为电商巨头,其商品评论数据极具价值。本文详细介绍了淘宝评价API接口的开发流程与应用场景,从注册账号、获取密钥到实际调用和数据解析,再到商品分析、店铺管理、个性化推荐等多个方面,全面解析了技术细节与实践方法,为企业和开发者提供了宝贵的技术支持和数据资源。
725 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以其实用性和灵活性,正成为项目管理领域的新兴力量。
2255 1
|
算法 安全 Java
深入JDK源码:揭开ConcurrentHashMap底层结构的神秘面纱
【8月更文挑战第24天】`ConcurrentHashMap`是Java并发编程中不可或缺的线程安全哈希表实现。它通过精巧的锁机制和无锁算法显著提升了并发性能。本文首先介绍了早期版本中使用的“段”结构,每个段是一个带有独立锁的小型哈希表,能够减少线程间竞争并支持动态扩容以应对高并发场景。随后探讨了JDK 8的重大改进:取消段的概念,采用更细粒度的锁控制,并引入`Node`等内部类以及CAS操作,有效解决了哈希冲突并实现了高性能的并发访问。这些设计使得`ConcurrentHashMap`成为构建高效多线程应用的强大工具。
209 2
|
JavaScript Java 测试技术
基于SpringBoot+Vue的地方特色美食分享管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的地方特色美食分享管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
186 5

热门文章

最新文章