首页 > 其他分享 >503 最长路径

503 最长路径

时间:2024-10-10 15:25:48浏览次数:7  
标签:最长 idx int 路径 ne 503 fa 节点

// 503 最长路径.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/5/problem/226

有一棵 n个节点的树,节点编号从 1 到 n。
对于每个节点,请求出经过它的长度最长的简单路径有多长。

定义一条路径的长度为这条路径上经过了多少条边。

输入格式
第一行一个整数 n 表示节点数。

接下来 n−1 行,每行两个整数 x,y 表示 x号节点和 y 号节点之间有一条边。

数据保证读入的是一棵树。

输出格式
输出共 n 行,第 i 行一个整数表示经过 i 号节点的长度最长的简单路径有多长。

样例输入
5
1 2
1 5
2 3
2 4
样例输出
3
3
3
3
3
数据规模
对于所有数据,保证 2≤n≤105,1≤x,y≤n。
*/

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>

using namespace std;

const int N = 100010;
int h[N], e[2 * N], ne[2 * N], idx;
int n, f[100010][2][2], v[100010];


void add(int a, int b) {
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void up(int u, int fa) {
	for (int i = h[u]; i != -1; i = ne[i]) {
		int j = e[i]; 
		if (j == fa) continue;
		up(j,u);
		if (f[j][0][0] + 1 > f[u][0][0]) {
			f[u][1][0] = f[u][0][0], f[u][1][1] = f[u][0][1], f[u][0][0] = f[j][0][0] + 1, f[u][0][1] = j;
		}
		else {
			if (f[j][0][0] + 1 > f[u][1][0])
				f[u][1][0] = f[j][0][0] + 1, f[u][1][1] = j;
		}
	}
}

void down(int u, int fa) {
	for(int i = h[u]; i != -1; i = ne[i]) {
		int j = e[i];
		if (j == fa) continue;
		if (f[u][0][1] == j) {
			if (v[u] > f[u][1][0])
				v[j] = v[u] + 1;
			else
				v[j] = f[u][1][0] + 1;
		}
		else {
			v[j] = max(f[u][0][0], v[u]) + 1;
		}
		down(j, u);
	}
}

int main() {
	memset(h, -1, sizeof h);
	//l = 0;
	cin >> n;
	for (int i = 1; i < n; i++) {
		int x, y;
		cin >> x >> y;
		add(x, y);
		add(y, x);
	}
	up(1, -1);
	down(1, -1);
	 
	for (int i = 1; i <= n; i++)
		cout << f[i][0][0] + f[i][1][0] + v[i] - min(min(f[i][0][0], f[i][1][0]), v[i]) << endl;
}

标签:最长,idx,int,路径,ne,503,fa,节点
From: https://www.cnblogs.com/itdef/p/18456428

相关文章

  • 基于模糊神经网络的移动机器人路径规划matlab仿真
    1.程序功能描述基于模糊神经网络的移动机器人路径规划1.环境地图中的障碍物为静态、未知障碍物,可以随机设置。(一般设置5~7个,为计算简便设置成规则性状的障碍物)2.机器人的行进方向为X轴的正方向,X轴逆时针旋转90°即为Y轴。两驱动轮之间的距离为50cm,驱动轮的直径为30cm。机器人的......
  • Leetcode 864. 获取所有钥匙的最短路径
    1.题目基本信息1.1.题目描述给定一个二维网格grid,其中:‘.’代表一个空房间‘#’代表一堵墙‘@’是起点小写字母代表钥匙大写字母代表锁我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。我们不能在网格外面行走,也无法穿过一堵墙。如果途经一个......
  • 记录下物理机bond配置及物理机多路径配置
    在进行bond聚合口配置前,要先使用ipa查看当前物理机有哪些网卡,哪些网卡接了线(状态是否为UP)后再确定要用哪两个物理接口进行聚合。 #进行bond模式配置,模式4是动态链接聚合,需和交换机侧的LACP配合使用[root@xxxmapper]#cat/etc/modprobe.d/bonding.confaliasbond0bondingo......
  • 5. 最长回文子串
    思路首先判断字符串是否是回文,是则直接返回,不是则遍历:从第一个字符开始遍历,判断对应字符串是否是回文且是不是最大长度时间复杂度:O(N^3)动态规划解法:状态初始化为Falsedp[i][j]回文:s[i]=s[j]且[i-1:j-1]也为回文classSolution(object):deflongestPalindrom......
  • Mac 系统终端和vscode终端的pnpm版本和路径不一致问题,而且vscode终端的pnpm没法升级
    系统终端whichpnpm路径是/Users/zhanglinfeng/.nvm/versions/node/v16.19.1/bin/pnpm vscode终端 whichpnpm 路径是/usr/local/bin/pnpm 为了跟系统的一致,需要修改.zshrc文件新的#AddRVMtoPATHforscripting.MakesurethisisthelastPATHvariablec......
  • 无人机集群路径规划:5种优化算法(APO、GOOSE、CO、PSO、PIO)求解无人机集群路径规划,提供M
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • 开发日志:IIS文件路径泄漏
    为了解决IIS文件路径泄漏问题,可以采取以下措施:一.详细操作CMD关闭NTFS8.3文件格式的支持命令行:fsutil8dot3nameset1修改注册表禁用短文件名功能CMD输入regedit回车,在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的NtfsDisable......
  • (LeetCode 热题 100) 1143. 最长公共子序列(动态规划dp)
    题目:1143.最长公共子序列思路:经典动态规划dp题型,时间复杂度为0(n^2)。C++版本:classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){intn=text1.size(),m=text2.size();//状态f[i][j]表示:text1[0,i]和text2[0......
  • 【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路
    操作环境:MATLAB2022a1、算法描述孔雀优化算法(PeafowlOptimizationAlgorithm,简称POA)以孔雀(peafowl)的求偶展示行为为灵感,通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化算法的详细描述:孔雀优化算法是一种基于自然界中孔雀求偶展示行为的群体智能优化算法。孔雀......
  • 解析 Keras 图像预处理导入路径及问题探讨
    一、检查导入路径是否正确确保你的导入语句是正确的。对于TensorFlow2.x及以上版本,正确的导入方式可能如下:fromtensorflow.keras.preprocessing.imageimportImageDataGenerator如果你的TensorFlow版本较旧或者安装有问题,可能需要调整导入路径。二、简单方法(查找正......