Cod sursa(job #3358562)

Utilizator Octavian09Dore Octaviam Octavian09 Data 17 iunie 2026 23:39:11
Problema Diametrul unui arbore Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#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;
}