Cod sursa(job #1705708)

Utilizator morris18cmDumnezeu morris18cm Data 20 mai 2016 22:13:07
Problema Diametrul unui arbore Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <time.h>
#include <stdlib.h>

using namespace std;

struct node{
    vector<int> fii;
    int tata = 0;
}arbore[100005];

int n, x, y, frunza, lungime=0;

void DFS(int i, int distanta)
{
    if( arbore[i].fii.size() ){
        for(int j=0; j<arbore[i].fii.size(); j++){
            DFS(arbore[i].fii[j], distanta+1);
        }
    }else{
        if(distanta>lungime){
            frunza=i;
            lungime=distanta;
        }
    }
}

void DFS2(int i, int distanta){
    if(arbore[i].tata != 0){
        for(int j=0;j< arbore[arbore[i].tata].fii.size();j++)
        {
            if(arbore[arbore[i].tata].fii[j] != i)
                {
                    DFS(arbore[arbore[i].tata].fii[j], distanta+2);
                };
        }
        DFS2(arbore[i].tata, distanta+1);
    }
}

int radacina(){
    srand (time(NULL));
    int k = rand() % n + 1;
    while(arbore[k].tata){
        k=arbore[k].tata;
    }
    return k;
}

int main()
{
    ifstream f ("darb.in");
    ofstream g ("darb.out");
    f>>n;
    while(f>>x>>y)
        {
            arbore[x].fii.push_back(y);
            arbore[y].tata=x;
        }

    DFS(radacina(), 1);
    cout<<lungime;
    lungime = 0;
    DFS2(frunza, 1);
    cout<<lungime;
    g<<lungime;
    return 0;
}