Ссылка на заголовок: https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1369
Тема
Для дерева с N узлами найдите расстояние (диаметр дерева) между двумя самыми дальними точками на этом дереве. Количество узлов в дереве варьируется от 0 до (N-1). Расстояние между всеми соседними узлами равно 1.
Идеи
Сначала возьмите случайную точку, чтобы построить дерево для корневого узла и запустить dfs. Я взял 0, затем взял самый глубокий узел t, а затем использовал t в качестве корня для построения дерева и запуска dfs. Максимальная глубина - это диаметр дерева.
код переменного тока
#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int> v[105];
int ans, mx;
void dfs(int s, int fa, int dep){
if(dep > ans){
ans = dep;
mx = s;
}
for(int i = 0; i < v[s].size(); i ++){
int t = v[s][i];
if(t == fa) continue;
dfs(t, s, dep + 1);
}
}
int main(){
int n;
while(~scanf("%d", &n)){
for(int i = 0; i < n; i ++) v[i].clear();
for(int i = 1; i < n; i ++){
int x, y;
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
ans = 0, mx = 0;
dfs(0, -1, 0);
ans = 0;
dfs(mx, -1, 0);
printf("%d\n", ans);
}
return 0;
}