Pagini recente » Cod sursa (job #557927) | Cod sursa (job #184500) | Monitorul de evaluare | Cod sursa (job #3358571) | Cod sursa (job #3358562)
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;
const int NMAX=100000;
ifstream f("darb.in");
ofstream g("darb.out");
struct nod{
int info;
nod *urm;
};
nod *arb[NMAX+1];
int n,max_dist,nod_max;
int dist[NMAX+1];
bool viz[NMAX+1];
void add(int a,int b){
nod *p=new nod;
p->info=b;
p->urm=arb[a];
arb[a]=p;
}
void citire(){
int a,b;
f >> n;
for(int i=1;i<=n-1;i++){
f >> a >> b;
add(a,b);
add(b,a);
}
}
void bfs(int x){
queue<int> Q;
max_dist=1;
dist[x]=1;
viz[x]=1;
Q.push(x);
while(!Q.empty()){
int crt=Q.front();
Q.pop();
for(nod *p=arb[crt];p!=NULL;p=p->urm){
if(viz[p->info]==0){
dist[p->info]=dist[crt]+1;
if(dist[p->info]>max_dist){
max_dist=dist[p->info];
nod_max=p->info;
}
viz[p->info]=1;
Q.push(p->info);
}
}
}
}
void clean(){
for(int i=1;i<=n;i++)
viz[i]=0;
}
int main()
{
citire();
bfs(1);
clean();
bfs(nod_max);
g << max_dist;
return 0;
}