Cod sursa(job #1951466)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 3 aprilie 2017 17:11:36
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
#include <bits/stdc++.h>

using namespace std;

class Reader
{
public:
    Reader() {}
    Reader(const char *file_name)
    {
        input_file = fopen(file_name, "r");
        cursor = 0;
        fread(buffer, SIZE, 1, input_file);
    }
    inline Reader &operator >>(int &n)
    {
        while(buffer[cursor] < '0' || buffer[cursor] > '9')
        {
            advance();
        }
        n = 0;
        while('0' <= buffer[cursor] && buffer[cursor] <= '9')
        {
            n = n * 10 + buffer[cursor] - '0';
            advance();
        }
        return *this;
    }

    inline Reader &operator >>(char &n)
    {
        while(!((buffer[cursor] >= 'a' && buffer[cursor] <= 'z') || (buffer[cursor] >= 'A' && buffer[cursor] <= 'Z') ))
        {
            advance();
        }

        if( (buffer[cursor] >= 'a' && buffer[cursor] <= 'z') || (buffer[cursor] >= 'A' && buffer[cursor] <= 'Z'))
        {
            n=buffer[cursor] ;
            advance();
        }
        return *this;
    }
private:
    FILE *input_file;
    static const int SIZE = 1 << 17;
    int cursor;
    char buffer[SIZE];
    inline void advance()
    {
        ++ cursor;
        if(cursor == SIZE)
        {
            cursor = 0;
            fread(buffer, SIZE, 1, input_file);
        }
    }
};

vector <int> G[100001];
int n,last,maxi=-1;
bitset <100001> H;
Reader f("darb.in");
ofstream g("darb.out");

inline void DFS(int node,int level=1)
{
    H[node]=1;
    if(level>maxi) maxi=level,last=node;
    for(auto it:G[node])
        if(H[it]==0) DFS(it,level+1);
    H[node]=0;
}

int main()
{
    f>>n;
    for(int i=1;i<n;i++)
    {
        int x,y;
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }

    DFS(1);
    DFS(last);
    g<<maxi;
}