Pagini recente » Cod sursa (job #124863) | Cod sursa (job #560073) | Cod sursa (job #2517102) | Cod sursa (job #262792) | Cod sursa (job #2312838)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
vector<int> son[100002];
int n;
int toLeaf[100002];
int maxLength=0;
int calcToLeaf(int s)
{
toLeaf[s]=0;
for(auto u:son[s])
toLeaf[s]=max(toLeaf[s],calcToLeaf(u)+1);
maxLength=max(maxLength,toLeaf[s]);
return toLeaf[s];
}
void calcMaxLength(int s)
{
int minMax=-1,maxMax=-1;
for(auto u:son[s])
if (toLeaf[u]>minMax)
{
minMax=toLeaf[u];
if(minMax>maxMax)
swap(minMax,maxMax);
}
int sum=2;
sum+=minMax;
sum+=maxMax;
maxLength=max(maxLength,sum);
}
int main()
{
int maxDepth=0;
fin>>n;
for(int i=0;i<n;i++)
{
int v,u;
fin>>v>>u;
maxDepth=max(maxDepth,u);
son[v].push_back(u);
}
calcToLeaf(1);
for(int i=1;i<=maxDepth;i++)
if(son[i].size()>1)
calcMaxLength(i);
fout<<maxLength+1;
return 0;
}