Computer【HDU-2196】【在线LCA+树的直径】

2023-10-26

题目链接


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 10007;
int N, cnt, head[maxN], root[maxN][20], deep[maxN];
ll dis[maxN];
struct Eddge
{
    int nex, to;
    ll val;
    Eddge(int a=-1, int b=0, ll c=0):nex(a), to(b), val(c) {}
}edge[maxN<<1];
void addEddge(int u, int v, ll val)
{
    edge[cnt] = Eddge(head[u], v, val);
    head[u] = cnt++;
}
void dfs(int u, int fa, int depth)
{
    root[u][0] = fa;
    deep[u] = depth;
    for(int i=head[u]; i!=-1; i=edge[i].nex)
    {
        int v = edge[i].to;
        if(v == fa) continue;
        dis[v] = dis[u] + edge[i].val;
        dfs(v, u, depth + 1);
    }
}
void pre_LCA(int st)
{
    dfs(st, -1, 0);
    for(int j=0; (1<<(j+1))<N; j++)
    {
        for(int i=1; i<=N; i++)
        {
            if(root[i][j] < 0) root[i][j+1] = -1;
            else root[i][j+1] = root[root[i][j]][j];
        }
    }
}
int LCA(int x, int y)
{
    if(deep[x] < deep[y]) swap(x, y);
    int temp = deep[x] - deep[y];
    for(int i=0; (1<<i)<=temp; i++)
    {
        if((temp>>i) & 1) x = root[x][i];
    }
    if(x == y) return x;
    for(int i=log2(1.*N); i>=0; i--)
    {
        if(root[x][i] != root[y][i])
        {
            x = root[x][i];
            y = root[y][i];
        }
    }
    return root[x][0];
}
ll large_dis;
int its_pos;
int L, R;   //最后得到的树的直径的两头的点
void dfs1(int u, int fa, ll juli)
{
    if(juli > large_dis)
    {
        large_dis = juli;
        its_pos = u;
    }
    for(int i=head[u]; i!=-1; i=edge[i].nex)
    {
        int v = edge[i].to;
        if(v == fa) continue;
        dfs1(v, u, juli + edge[i].val);
    }
}
void dfs2(int u, int fa, ll juli)
{
    if(juli > large_dis)
    {
        large_dis = juli;
        R = u;
    }
    for(int i=head[u]; i!=-1; i=edge[i].nex)
    {
        int v = edge[i].to;
        if(v == fa) continue;
        dfs2(v, u, juli + edge[i].val);
    }
}
void solve_RD_of_Tree()
{
    large_dis = 0;
    dfs1(1, 1, 0);
    L = its_pos;
    large_dis = 0;
    dfs2(L, L, 0);
}
void init()
{
    cnt = 0;
    memset(dis, 0, sizeof(dis));
    memset(head, -1, sizeof(head));
    memset(root, -1, sizeof(root));
}
int main()
{
    while(scanf("%d", &N)!=EOF)
    {
        init();
        for(int i=2; i<=N; i++)
        {
            int e1;
            ll e2;
            scanf("%d%lld", &e1, &e2);
            addEddge(e1, i, e2);
            addEddge(i, e1, e2);
        }
        pre_LCA(1);
        solve_RD_of_Tree();
        for(int i=1; i<=N; i++)
        {
            int the_same = LCA(L, i);
            ll dis1 = dis[L] + dis[i] - 2*dis[the_same];
            the_same = LCA(R, i);
            ll dis2 = dis[R] + dis[i] - 2*dis[the_same];
            printf("%lld\n", max(dis1, dis2));
        }
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Computer【HDU-2196】【在线LCA+树的直径】 的相关文章

  • [USACO06FEB]Steady Cow Assignment G【二分+最大流】

    题目链接 P2857 USACO06FEB Steady Cow Assignment G 有N头牛 B个牛棚 告诉你每头牛心里牛棚的座次 即哪个牛棚他最喜欢 哪个第2喜欢 哪个第3喜欢 等等 但牛棚容量一定 所以每头牛分配到的牛棚在该牛心
  • 质数

    include
  • Connections between cities 【HDU - 2874】【在线LCA算法】

    题目链接 昨天刚学了在线LCA 今天就来硬刚这道题还是花了一整天的时间 不过对于LCA却有了更多的理解 这道题在讲述不同根的做法上尤其是很好的 题目告诉我们有N个节点和M条边 以及C次询问 每次查询的是 L R 这两个节点间的距离 还是算得
  • LeetCode-Python-1584. 连接所有点的最小费用(MST)

    给你一个points 数组 表示 2D 平面上的一些点 其中 points i xi yi 连接点 xi yi 和点 xj yj 的费用为它们之间的 曼哈顿距离 xi xj yi yj 其中 val 表示 val 的绝对值 请你返回将所有点
  • 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-RC-u5 树与二分图

    2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 文章目录 2022 RoboCom 世界机器人开发者大赛 本科组 省赛 RC u5 树与二分图 题目描述 输入格式 输出格式 输入样例 输出样例 思路 A
  • UVA-1601 万圣节后的早晨 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 以三个点的当前位置作为状态 广度优先遍历 找到终点即为最短次数 注意 一次可以移动多个点 但是每个点只能移动一步 在同一次中 B可
  • 二分图最大完美匹配

    嗯 想不通 就是二分之后的点 寻找左边的点和右边的点的保证两条边的顶点不相同的最大边数 匈牙利算法 O mn 左边寻找和右边相邻的边 如果右边还没有和左边进行连线 那么匹配成功 如果右边已经进行连线 那么考虑左边是否能更改连线 换一个右边
  • 【斯坦福CS224W笔记之二】传统图机器学习的特征工程 — 节点

    Traditional Methods for ML on Graphs 是根据同济子豪兄学长的中文讲解做的笔记哦 感兴趣的话可以直接去b站观看详细视频 传送带 https github com TommyZihao zihao cours
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • 离散数学第一章总结

    离散数学第一章 1 公式类型 1 重言式 也是永真式 公式真值恒为1 2 矛盾式 永假式 真值恒为0 3 可满足式 不是矛盾式的就都是可满足式 重言式一定是可满足式 2 成真赋值与成假赋值 也叫成真指派与成假指派 一组原子的取值 真值指派
  • 矩阵树定理

    启蒙 http zhengruioi com contest 1416 T1 T2的10分暴力 后面是论文科技 不搞了 https www luogu com cn problem P6178 O n 3
  • POJ 3259 Wormholes(最短路——Bellman-ford)

    A Wormholes While exploring his many farms Farmer John has discovered a number of amazing wormholes A wormhole is very p
  • [图论]---[网络流]---最大权闭合子图

    最大权闭合子图 闭合图的概念 闭合图建立在有向图之上 对于 G V E 选取一个点的子集 V V 的任意一点的所有能到达的点也在集合 V 内 则称 V 为闭合子图 最大权闭合子图即在G的所有闭合子图中 点权和最大的 最大权闭合子图的求法 构
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • Summer Holiday HDU - 1827 强连通分量+缩点

    To see a World in a Grain of Sand And a Heaven in a Wild Flower Hold Infinity in the palm of your hand And Eternity in a
  • The Necklace 【UVA - 10054】【欧拉回路详解】

    题目链接1 题目链接2 题目求的是一串珠子 要让它们首尾相互照应才能串起来 并且 最后要连成一个环 使得最后的珠子的尾与第一个珠子的头相互对应 那么 这道题就是道求欧拉回路的题了 我们要先判断这是不是能够构成欧拉回路 这是个无向图 再对于需
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y
  • 数据结构——广度优先遍历(BFS)无向连通图

    以下是数据结构中关于广度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的层次遍历的推广 头文件及宏 include

随机推荐

  • 【计蒜客】2n皇后问题

    思路 此题与n皇后问题十分类似 也是利用递归回溯求解 这题放2n个皇后 我采取的做法是 先放n个黑皇后 再放n个白皇后 具体实现见代码 一些细节方面我都标注出来了 并且做了详细解释 代码 include
  • [Python] Python中的模块、包和内置函数

    1 模块 python 模块简单来说就是一个 py文件 程序的目的是运行 而模块的目的是供其他程序导入并且使用 模块也有对象 每个模块对象都有一个特殊属性 dict 这是一个包含模块符号表的字典 导入模块 import importable
  • springboot 配置双mysql数据库

    项目中用到 学习了一下 记录下来 先回用 再搞懂原理 架构 springboot mybatis mysql连接池 springboot默认的HikariCP 配置点 1 就目录里的DataSourceConfigBackup和DataSo
  • seaborn可视化01,涵盖几乎所有用法

    seaborn可视化 一 Matplotlib试着让简单的事情更加简单 困难的事情变得可能 而Seaborn就是让困难的东西更加简单 seaborn是针对统计绘图的 一般来说 seaborn能满足数据分析90 的绘图需求 Seaborn其实
  • 应用程序图标丢失快捷方式没有图标怎么办

    应用程序图标丢失快捷方式没有图标怎么办 有的时候由于各种不小心 把应用程序的快捷方式删除或者是拉到了另一个盘符等各种原因 在将其恢复发现没有应用程序的图标了 找到应用程序的安装目录 添加其快捷方式仍然没有图标 发现很难看 特别是有强迫症的人
  • 机器学习------结构因果机制(SCM)、因果关系、因果推断

    因果 1 什么是因果 为什么研究因果 1 1 什么是 1 2 为什么研究 1 3 机器学习中用到的因果推论 1 4 因果性和相关性的区别 Two main questions Two main frameworks 2 因果研究发展 2 1
  • 英飞凌 AURIX TC3XX 系列单片机的 CAN 外设介绍(一)

    1 前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 MCMCAN 外设介绍 MCMCAN 遵循 ISO 11898 1 和 ISO 11898 4 做数据收发 能提供 ISO 11898 4 中规定的时间触发通信的所有功
  • 最适合程序员转行的10大职业

    三十而立 源自 论语 为政 说的是人到了30岁就应该去面对生活中的一切困难 而对于软件开发领域的从业者来说 30岁 却是一道槛 30岁以后 适合程序员的工作到底是什么 专家和大家一起分解 No 1 程序员 适合程序员30岁以后的工作 排名第
  • 【CSS3】transition与animation的区别

    animation 可以用 name 设置动画的名称 用 duration 设置动画完成的周期 用 timing function 设置动画的速度曲线 delay 设置动画什么时候开始 iteration count 设置动画播放的次数 d
  • 使用Python做副业,我需要具备什么技能水平?

    B站主页 https space bilibili com 1707990930 欢迎 点赞 收藏 评论 如有错误请指正 Python Java领域博主 你们的支持是我最大的动力 文章目录 使用Python做副业 我需要具备什么技术水平 爬
  • SpringDoc + Spring Gateway + Knife4j 集成

    前言 如果有必要使用Spring Doc时 好像官方的文档相对较少 为此重新尝试了一把 SpringDoc的基本使用请查看官网 这里关键说下Spring Gateway 的配置 POM xml
  • python生成随机字符串包含数字字母_如何在Python中生成带有大写字母和数字的随机字符串?...

    您可以使用random choice list of choices 获取随机字符 然后循环遍历并获取列表 最后加入该列表以获取字符串 这里的选择列表是大写字母和数字 例如 import string import random def g
  • 2021年自然语言处理与信息检索国际会议(ECNLPIR 2021)EI检索

    2021年自然语言处理与信息检索国际会议 ECNLPIR 2021 重要信息 会议网址 www ecnlpir org 会议时间 2021年8月13 15日 召开地点 瑞典斯德哥尔摩 截稿时间 2021年6月30日 录用通知 投稿后2周内
  • 2021-12-01 xorm.io/builder

    xorm io builder go和xorm的轻量级快速sql构建器 一般用来构造查询条件 用法 初始化一个cond cond builder NewCond cond的方法 cond And builder语句 且连接 可连接多个con
  • 3张照片打造专属形象!酷蛙FaceChain解密个人写真开源项目,人人AIGC!

    一 背景说明 各类AI写真软件由于其精准的个人形象 精美的生成效果引爆了朋友圈传播 证件照满足了用户刚需 古装照等风格照满足了用户 美照 的需求 酷蛙FaceChain开源项目团队推出了开源版本 希望结合开源社区开发者的力量 可以让图片应用
  • 操作符详解

    在之前的篇章说过 我们不能自己创建操作符 只能使用c语言所给的操作符 那今天就来看看操作符具体有哪些呢 目录 1 操作符分类 2 算术操作符 3 移位操作符 左移操作符 右移操作符 4 位操作符 5 赋值操作符 6 单目操作符 7 关系操作
  • 强化学习笔记------第一章----强化学习概述(超详细)

    强化学习讨论的问题是一个智能体 agent 怎么在一个复杂不确定的环境 environment 里面去极大化他能获得的奖励 首先 我们可以把强化学习和监督学习做一个对比 例如图片分类 监督学习 supervised learning 指的是
  • 一篇史上最全面的 Vue 代码风格指南,建议收藏

    作者 卡喵妹 https juejin cn post 6987349513836953607 一 命名规范 市面上常用的命名规范 camelCase 小驼峰式命名法 首字母小写 PascalCase 大驼峰式命名法 首字母大写 kebab
  • 【云原生】SpringCloud-Spring Boot Starter使用测试

    目录 Spring Boot Starter是什么 以前传统的做法 使用 Spring Boot Starter 之后 starter 的理念 starter 的实现 创建Spring Boot Starter步骤 在idea新建一个sta
  • Computer【HDU-2196】【在线LCA+树的直径】

    题目链接 include