题解:
对于每一个节点,寻找节点所在链上分叉链里面,最长的链
总结:
1.比赛的时候因为第一道题目卡出了,第二道题也没有用心想,后来才想到的
2.也不是很难,但是也算是想了一会,我觉得以后做题要注重目标,对于这道题目:对于每条链,考虑所有扫描过的链,如何能够和这条链产生的最好的结果。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
#define MAXN 100005
#define pb push_back
vector<int>vec[MAXN];
int ans,maxn;
int dfs(int u,int d)
{
ans = max(d + maxn,ans);
int deep = d;
for(int i = 0;i < vec[u].size();i++)
{
int v = vec[u][i];
deep = max(dfs(v,d + 1),deep);
maxn = max(deep - d,maxn);
}
return deep;
}
int main()
{
int n,u,v;
while(cin >> n)
{
for(int i = 0;i <= n;i++)vec[i].clear();
for(int i = 0;i < n - 1;i++)
{
scanf("%d%d",&u,&v);
vec[u].pb(v);
}
maxn = ans = 0;
dfs(1,0);
cout << ans << endl;
}
}