Wek6 A - Tree diameter

2023-05-16

问题描述:

实验室里原先有一台电脑(编号为1),最近氪金带师咕咕东又为实验室购置了N-1台电脑,编号为2到N。每台电脑都用网线连接到一台先前安装的电脑上。但是咕咕东担心网速太慢,他希望知道第i台电脑到其他电脑的最大网线长度,但是可怜的咕咕东在不久前刚刚遭受了宇宙射线的降智打击,请你帮帮他。

解题思路:

一棵树中,每个点能到达的最远端点一定是树直径的两端点之一,故首先应得到树直径的两个端点,任取一个点dfs,能到达的最远端点是树直径两端点之一end1,再从end1dfs找到最远端点end2,这就是树直径的另外一个端点,🐟求每个点离其他点的最远距离只要求该点到两端点距离的最大值即可。

  • 第一个dfs函数用来找end1,维护一个全局变量maxlen,当到该顶点的距离超过maxlen,maxlen=len;

  • 第二个dfs函数在找end2的同时,对每次到达的节点记录距离值,这样就求出来了end1到每个节点的距离值,再调用该函数从end2开始dfs,即可求得end2到每个节点的距离值。

!!!note:
初始化很重要:边数ecnt的初始化,head数组的初始化,以及在dfs之前vis数组和maxlen的初始化!因为没有初始化导致WA,TLE多次,浪费了很多时间/(ㄒoㄒ)/~~Remember the lesson!噢还发生了一个错误,边数组的空间应该是顶点数的两倍!(因为是无向边)

Input:
输入文件包含多组测试数据。对于每组测试数据,第一行一个整数N (N<=10000),接下来有N-1行,每一行两个数,对于第i行的两个数,它们表示与i号电脑连接的电脑编号以及它们之间网线的长度。网线的总长度不会超过10^9,每个数之间用一个空格隔开。

Output:
对于每组测试数据输出N行,第i行表示i号电脑的答案 (1<=i<=N).

Sample Input
5
1 1
2 1
3 1
1 1

Sample Output
3
2
3
4
4

实验代码:

#include<iostream>
using namespace std;
#include<cstdio>
#include<algorithm>
int head[10010];		 
struct Edge
{
	int v;
	int w;
	int next;			
};
Edge edge[10010*2];		
int ecnt;				
bool vis[10010];		
int end1,end2,maxlen;			
int len1[10010];
int len2[10010];
void initial(int N)		 
{
	for(int i=1;i<=N;i++)	
		head[i]=-1;
	ecnt=0;
}
void insert_Edge(int u,int v,int w)		
{
	edge[ecnt].v=v;		//顶点是u 
	edge[ecnt].w=w;
	edge[ecnt].next=head[u];
	head[u]=ecnt;
	ecnt++;
	edge[ecnt].v=u;		//顶点是u 
	edge[ecnt].w=w;
	edge[ecnt].next=head[v];
	head[v]=ecnt;
	ecnt++;
} 
void dfs(int start,int length)
{
	vis[start]=true;
	if(length>maxlen)		
	{
		end1=start;
		maxlen=length; 
	}
	for(int e=head[start];e!=-1;e=edge[e].next)
	{
		if(!vis[edge[e].v])
			dfs(edge[e].v,length+edge[e].w);
	}
}
void dfs_(int start,int length,int* len)
{
	vis[start]=true;
	len[start]=length;
	if(length>maxlen)		
	{
		end2=start;
		maxlen=length;
	}
	for(int e=head[start];e!=-1;e=edge[e].next)
	{
		if(!vis[edge[e].v])
			dfs_(edge[e].v,length+edge[e].w,len);
	}
}
void getAns(int N)
{
	for(int i=1;i<=N;i++)
		vis[i]=0;
	maxlen=0;		
	dfs(1,0);
	
	maxlen=0;
	for(int i=1;i<=N;i++)
		vis[i]=0;
	dfs_(end1,0,len1);
	
	for(int i=1;i<=N;i++)
		vis[i]=0;
	dfs_(end2,0,len2);
	
	for(int i=1;i<=N;i++)
		printf("%d\n",max(len1[i],len2[i]));
}
int main(void)
{
	int N;
	int v,w;
	while(scanf("%d",&N)==1)
	{
		initial(N);			//!!!初始化 
		for(int i=2;i<=N;i++)		
		{
			scanf("%d%d",&v,&w);			
			insert_Edge(i,v,w);		
		}
		getAns(N);
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wek6 A - Tree diameter 的相关文章

  • 单击父节点时检查树的子节点 [ExtJS]

    我想知道如何在单击 ExtJs 中的特定节点时检查树的同级节点 我已经给了每个节点的 id 我可以访问单击的节点的 id 那么我如何继续自动检查子节点 有人请帮助我 or any other way of getting hands on
  • 迭代多级提升树

    我的树看起来像这样 Library L ID 1 Book B ID 1 Title Moby Dick Book B ID 2 Title Jurassic Park Library L ID 2 Book B ID 1 Title Ve
  • D3可折叠树不同节点颜色

    我在 d3 js 中有一个可折叠的树 我的目标是通过 类型 属性为节点着色 例如 类型 str 的节点应填充为红色 而类型 elem 的节点应填充为绿色 我就是无法让它发挥作用 有人能帮助我吗 这是我的代码
  • 为什么在算法中使用子树大小来选择二叉树中的随机节点?

    我偶然发现了从二叉树中选择随机节点的算法的几种实现 它们都使用子树大小属性 但是 我不明白为什么知道子树大小有帮助 这是实现A https stackoverflow com a 32011526 and B https www geeks
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • 如何按层次结构对文件路径名进行排序?

    我想按层次结构对文件名进行排序 假设我有以下文件夹列表 D Movies Hollywood Comedy adultcomedy D Movies Hollywood Comedy horrorcomedy D Movies Hollyw
  • 知识树中的段错误

    我正在用 c 实现一个可以从文件中读取的知识树 我的 newStr 函数出现段错误 我无法用这个问题测试我的其余代码 我对 c 没有太多经验 任何帮助将不胜感激 我的 c 文件 包括 包括 include 动物 h 包括 包括 return
  • 在 Python 中删除表达式树及其每个子表达式树中第一个元素周围的括号

    目标是实现简化操作 删除表达式树及其每个子表达式树中第一个元素周围的括号 其中表达式作为括在各个括号中的字符串输入给出 这必须适用于任意数量的括号 例如 12 3 45 6 gt 123 45 6 删除 12 周围的括号 然后删除 45 周
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • Webix 树节点的 Font Awesome 图标

    Webix 与 Font Awesome 集成 http docs webix com desktop icon types html 但是如何使用 Font Awesome 图标代替树中的默认文件夹 文件图标来设置各个节点的样式呢 这是我
  • Silverlight 中的图形可视化

    我有一个表示有向图的数据结构 我正在寻找一个好的 Silverlight 可视化 以允许我从一个节点导航到另一个节点 最好带有一些漂亮的动画 有谁知道这种显示有什么好的 UI 控件或框架吗 甚至是来自另一个领域的样本 也许是社交网络 我的图
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • Python Pandas 按列对多索引进行排序,但保留树结构

    使用 pandas 0 20 3 我尝试按列 D 对数据帧的 n 个多级进行排序 其中的值 降序 以便维护组的层次结构 输入示例 D A B C Gran1 Par1 Child1 3 Child2 7 Child3 2 Par2 Chil
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • ruby 中的树和图数据结构[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我很难找到在 ruby 中使用的树数据结构 我可以研究一些众所周知的吗 我的要求很简单 我想创建一棵树 或者可能是一个图 并找到一些节点之
  • 是否可以在 Java 中创建对象树?

    我正在尝试用 Java 创建对象树 我还想使用一个 Java 类 可以轻松地在树中添加或删除节点 用于此目的的最佳类是什么 示例 这是一个对象数组 数组顶部的对象是字符串 world 这里的叶子是整数 我想添加字符串 This is at
  • 如何跟踪此对象图深度优先搜索算法中的深度?

    我有这段代码 它迭代一棵树 进行深度优先搜索 每个元素都只处理一次 非常好 void iterateOverTree TreeNode node NSMutableArray elements NSMutableArray array el
  • JAVA实现AVL树

    我想用Java实现一个AVL树 这是我到目前为止所拥有的 public class AVLNode private int size The size of the tree private int height The height of
  • javascript中的父子关系排序

    我有以下结构 category id 1 parent category null category id 2 parent category 1 category id 3 parent category 1 category id 4
  • 使用 O(1) 辅助空间迭代二叉树

    是否可以在 O 1 辅助空间中迭代二叉树 不使用堆栈 队列等 或者这已被证明是不可能的 如果可以的话 怎样才能做到呢 编辑 我得到的关于如果有指向父节点的指针就可能实现这一点的响应很有趣 我不知道可以做到这一点 但取决于您如何看待它 这可以

随机推荐

  • 【算法】选择排序法

    一 介绍 1 选择排序法是将序列分为两段 xff0c 有序前列和无序后列 xff0c 每次查找无序后列中最大元素 xff0c 将其插入到有序前列的最末尾处 xff0c 直至无序后列最后一个元素 xff0c 最终排序后的序列为降序序列 2 适
  • VMware WorkStation的三种网络连接方式

    版权声明 xff1a 对于本博客所有原创文章 xff0c 允许个人 教育和非商业目的使用 xff0c 但务必保证文章的完整性且不作任何修改地以超链接形式注明原始作者 出处及本声明 博客地址 xff1a http blog csdn net
  • lz4压缩格式-block

    概述 lz4属于lz77系列的压缩算法 xff0c lz77系列压缩算法将重复的字符串 xff08 也称为匹配 xff09 表示成 xff08 offset match length xff09 来对数据进行压缩 lz77算法只是一种思想
  • lz4算法实现

    概述 lz4算法是lz77算法的一种实现 xff0c 就是查找重复的字符串 xff0c 重复的字符串使用 距离 长度 来表示 比如abcdefgabcdefg xff0c 被压缩后就表示成了 xff1a abcdefg xff0c 1 7
  • 光传输-政企OTN技术总结

    政企高质量专线承载网 xff08 OTN xff09 维护承接 政企OTN xff1a 政企高质量专线承载网络 xff1b 目的是为了支持政企专线和云网融合业务的发展 xff0c 提高竞争力 政企OTN的特点 端到端 xff1a 用户接入设
  • Windows安装Anaconda,conda显示不是内部命令或者外部命令,路径加上反斜杠解决

    Windows安装Anaconda conda显示不是内部命令或者外部命令 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 这个问题是故事的开始 xff0c 由于电脑是win10 1050ti的 x
  • debian6对罗技摄像头C270——音视频采集

    0 debian6对罗技C270无驱摄像头 带MIC 的支持 0 1视频 0 1 1设备节点 dev video0 0 1 2驱动框架 V2L或V4L2 0 2音频 0 2 0准备工具 gome volume control xff1a g
  • AAC编码

    AAC编码 本篇使用的FFMPEG需要按照WIN下编译FFMPEG 基本要求 fdk aac对PCM文件有参数要求 采样格式 必须是16位整数的PCM 采样率 支持的采样率有 xff08 Hz xff09 xff1a 8000 11025
  • 【超分辨率】Zoom to Learn, Learn to Zoom

    前几天陈启峰大佬在我司内部分享几篇关于图像增强的文章 其中就有这篇 这篇文章是超分辨率落地的一个比较重要的文章 xff0c 跟以往自己去做高 低分辨率数据集不同 xff0c 本文采取了单反直接去制作数据集 xff0c 在真实场景上效果非常好
  • 4-26获取请求体数据 只有post方式时有

    注意这里保险点就是action写全路径就不用管别的了 注意一个问题 html中表单的action 这里的action中只写了 demo08 注意要跟运行的编辑配置中对应 如果划线地方只有 http localhost 80 则action应
  • 数据库作业八—嵌套查询、EXISTS、集合查询、基于派生表的查询

    嵌套查询 接着上一篇说 带有EXISTS谓词的查询 EXISTS 存在 带有EXISTS 谓词的子查询不返回任何数据 xff0c 只产生逻辑真值 true 或逻辑假值 false 如果返回true xff0c 主查询会执行 xff0c 返回
  • jupyter安装了tensorflow后一直报错No module named PIL

    以jupyter为例 xff0c 装了anaconda 明明运行pip install Pillow xff0c 显示了已经装载了 xff0c 但是就是找不到PIL包 解决办法就是 xff0c 这个包其实安装在base环境下 xff0c 你
  • makefile中的“立即展开”与“延后展开”

    GUN make的执行过程分为两个阶段 第一阶段 xff1a 读取所有的makefile文件 xff08 包括 MAKEFILES 变量指定的 指示符 include 指定的 以及命令行选项 f xff08 file xff09 指定的ma
  • 接口自动化之持续集成【Jenkins配置--Python+Pytest+Jenkins+Allure】

    前置条件 xff1a 接口自动化测试框架用的是Python 43 Pytest 43 Requests xff1b 本文Jenkins部署在本地电脑 xff08 实际应在服务器 xff0c 当然配置步骤一致 xff09 xff0c 本地部署
  • 【Django】Model query转换成Dataframe时,如何减少50%的内存消耗

    通常我们在Django framework里去取DB数据做处理时 xff0c 会用values 这个function xff0c 然后直接转换成dataframe 假设需要取整个table的数据 xff0c 简单粗暴的写法如下 xff1a
  • 使用pypi-server创建私有pip源

    为了让内网使用pip下载安装 需要在内网中创建pip源 类似离线仓库 使用pypiserver可以指定离线仓库目录 xff0c 将安装包放到离线仓库目录即可 xff0c 只要有人上传一次后 xff0c 其他人需要该模块 xff0c 就不用再
  • UBUNTU下QT开发应用程序常见错误及其解决办法

    错误 xff1a helloworld直接报错 1 error cannot find lGL 原因 xff1a 缺少GL库 解决办法 xff1a sudo apt get install libgl1 mesa dev 我下载 了最新的q
  • 1488:新的开始

    题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a 在这一
  • 解决:使用 Vue 3 Script Setup 时 ESLint 报错 ‘defineProps‘ is not defined

    解决 xff1a 使用 Vue 3 Script Setup 时 ESLint 报错 defineProps is not defined Vue 3 的 Script Setup 语法引入了 defineProps defineEmits
  • Wek6 A - Tree diameter

    问题描述 xff1a 实验室里原先有一台电脑 编号为1 xff0c 最近氪金带师咕咕东又为实验室购置了N 1台电脑 xff0c 编号为2到N 每台电脑都用网线连接到一台先前安装的电脑上 但是咕咕东担心网速太慢 xff0c 他希望知道第i台电