Cod sursa(job #3135571)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 3 iunie 2023 18:07:15
Problema Diametrul unui arbore Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define N 100000

std::vector <int> vecini[1 + N];
std::queue <int> q;
int dist[1 + N];
int n, d;

int lee(int start) {
    int last, next;
    for ( int i = 1; i <= n; i ++ )
        dist[i] = 0;
    dist[start] = 1;
    q.push(start);
    do {
        next = q.front();
        last = next;
        for ( unsigned int i = 0; i < vecini[next].size(); i ++ )
            if ( dist[vecini[next][i]] == 0 ) {
                dist[vecini[next][i]] = dist[next] + 1;
                q.push(vecini[next][i]);
            }
        q.pop();
    } while ( !q.empty() );
    return last;
}

int main() {
    FILE *fin, *fout;
    int x, y, last;

    fin = fopen("darb.in", "r");
    fscanf(fin, "%d", &n);
    for ( int i = 0; i < n - 1; i ++ ) {
        fscanf(fin, "%d%d", &x, &y);
        vecini[x].push_back(y);
        vecini[y].push_back(x);
    }
    fclose(fin);

    last = lee(1);
    d = dist[lee(last)];

    fout = fopen("darb.out", "w");
    fprintf(fout, "%d\n", d);
    fclose(fout);
    return 0;
}