hihoCoder week11 树中的最长路
题目链接: https://hihocoder.com/contest/hiho11/problem/1
求树中节点对 距离最远的长度
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n; vector<int> G[N]; int d[N]; void dfs(int u, int fa) { for(int i=0; i<G[u].size(); i++) { int v = G[u][i]; if(v != fa) { d[v] = d[u] + 1; dfs(v, u); } } } int main() { freopen("in.txt", "r", stdin); scanf("%d",&n); for(int i=0; i<n-1; i++) { int a,b; scanf("%d %d", &a, &b); G[a].push_back(b); G[b].push_back(a); } d[1] = 0; dfs(1, 0); int mx = 0; int index = -1; for(int i=1; i<=n; i++) { if(mx < d[i]) { mx = d[i]; index = i; } } //printf("%d\n", mx); memset(d,0,sizeof(d)); dfs(index, 0); for(int i=1; i<=n; i++) { if(mx < d[i]) { mx = d[i]; index = i; } } cout << mx <<endl; return 0; }
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; vector<int> G[N]; int n, ans; int dfs(int u,int fa) { int l1=-1,l2=-1; for(int i=0; i<G[u].size(); i++) { int v = G[u][i]; if(v == fa) continue; int l = dfs(v, u); if(l > l1) l2=l1 , l1=l; else l2 = max(l2, l); } //cout << u <<" "<< l1 <<" "<< l2 <<endl; ans = max(ans , l1 + l2 + 2); // cout << u <<" 最长的路为" <<l1 <<endl; return l1+1; } int main() { //freopen("in.txt", "r", stdin); cin >> n; for(int i=1; i<n; i++) { int a,b; scanf("%d %d", &a, &b); G[a].push_back(b); G[b].push_back(a); } ans = 0; dfs(1,0); cout << ans <<endl; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用