Cod sursa(job #2044114)

Utilizator lupulescu2001Lupulescu Vlad lupulescu2001 Data 20 octombrie 2017 21:58:44
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<vector>
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
vector <int> G[100003];
int visit[100003],coada[100003];
void citire(int &n,int &m)
{
    int x,y;
    fin>>n;
    while(fin>>x>>y)
    {
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void BFS(int nod,int &r)
{
    int l=1;
    r=1;
    coada[1]=nod;
    while(l<=r)
    {
        for(int j=0;j<G[coada[l]].size();j++)
            if(visit[G[coada[l]][j]]==0)
        {
            visit[G[coada[l]][j]]=visit[coada[l]]+1;
            r++;
            coada[r]=G[coada[l]][j];
        }
        l++;
    }
}

void BFS2(int nod,int &r)
{
    memset(visit,0,sizeof(visit));
    memset(coada,0,sizeof(coada));
    int l=1;
    r=1;
    coada[1]=nod;
    while(l<=r)
    {
        for(int j=0;j<G[coada[l]].size();j++)
            if(visit[G[coada[l]][j]]==0)
        {
            visit[G[coada[l]][j]]=visit[coada[l]]+1;
            r++;
            coada[r]=G[coada[l]][j];
        }
        l++;
    }
}
int main()
{
    int n,m,r;
    citire(n,m);
    BFS(1,r);
    BFS2(coada[r],r);
    fout<<visit[coada[r]]+1;
}