Cod sursa(job #2343637)

Utilizator razvan171514Razvan Mihai razvan171514 Data 14 februarie 2019 10:07:26
Problema Diametrul unui arbore Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#define LIM 7505

std::ifstream f ("darb.in");
std::ofstream g ("darb.out");

using namespace std;

int n, m;
vector<int>graf[LIM];
bool viz[LIM];
int distante[LIM];
const short start = 1;

void read();
void dfs(int nod);
void print (int v[], int n);
void printBool(bool v[], int n);
pair<int, int>nrMaxime(int v[], int n);

int main() {
    read();
    distante[start] = 1;
    dfs(start);
    g<<nrMaxime(distante, n).first + nrMaxime(distante, n).second - 1;
    return 0;
}

void read() {
    f>>n;
    for (int i=1;i<=n;++i) {
        pair<int, int>el;
        f>>el.first>>el.second;
        graf[el.first].push_back(el.second);
        graf[el.second].push_back(el.first);
    }
}

void dfs(int nod) {
    viz[nod] = true;
    int nrVecini = graf[nod].size();
    for (int i=0;i<nrVecini;++i) {
        int nodUrm = graf[nod][i];
        if (viz[nodUrm] == false) {
            distante[nodUrm] = distante[nod] + 1;
            dfs(nodUrm);
        }
    }
}

pair<int, int>nrMaxime(int v[], int n) {
    pair<int, int>maxime;
    maxime.first = maxime.second = INT_MIN;
    for (int i=1;i<=n;++i) {
        if (v[i] > maxime.first) {
            maxime.first = v[i];
        }else if (v[i] > maxime.second) {
            maxime.second = v[i];
        }
    }
    return maxime;
}

void print(int v[], int n) {
    for (int i=1;i<=n;++i)
        g<<v[i]<<' ';
    g<<'\n';
}

void printBool(bool v[], int n) {
    for (int i=1;i<=n;++i)
        g<<v[i]<<' ';
    g<<'\n';
}