题解
2025-08-07 16:10:56
发布于:上海
6阅读
0回复
0点赞
用深搜
#include<iostream>
#include<vector>
using namespace std;
const int N=1e5+10;
int n,c,dep[N];//c用来存储直径的一点,dep记录深度
vector<int>e[N];//边
void dfs(int u,int fa){
for(auto v:e[u]){
if(v==fa)continue;//不希望再让父节点进递归
dep[v]=dep[u]+1;
if(dep[v]>dep[c])c=v;
dfs(v,u);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);//通过一次dfs找到直径的一个点
dep[c]=0;
dfs(c,0);//从直径一端开始搜索,能搜索到直径
printf("%d",dep[c]);
return 0;
}
这里空空如也
有帮助,赞一个