Cod sursa(job #2251028)

Utilizator canmihaiCancescu Mihai canmihai Data 1 octombrie 2018 03:08:15
Problema Diametrul unui arbore Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include <iostream>
#include <fstream>
#include <vector>
#define DIM 100010
using namespace std;
int n,s=1,x,y,coada[110],p,f[110],fv[110],q,lm,s2,r,st,dist[DIM];
vector <int> a[DIM];
void umple(int v[], int n){
    for(int i=0;i<=105;i++)
        v[i]=n;
    }
int main () {
    ifstream fin("darb.in");
    ofstream fout("darb.out");
    fin>>n;
    while(fin>>x>>y){
        a[x].push_back(y);
        a[y].push_back(x);
    }
    p=1;
    coada[p]=s;
    f[s]=1;
    //fout<<coada[p]<<" ";
    while(lm<=p){
        fv[coada[lm]]=1;
        q=coada[lm];
        lm++;
            for(int i=0;i<a[q].size();i++){
                if(f[a[q][i]]==0){
                    s2=a[q][i];
                   //cout<<a[q][i]<<" ";
                    f[a[q][i]]=1;
                    if(fv[a[q][i]]==0){
                        coada[++p]=a[q][i];
                        lm=1;
                        fv[a[q][i]]=1;
                    }
                }
            }


    }
    umple(f,0);
    umple(fv,0);
    umple(coada,0);
     p=1;
    coada[p]=s2;
    f[s2]=1;
    lm=0;
    //fout<<coada[p]<<" ";
    while(lm<=p){
        fv[coada[lm]]=1;
        q=coada[lm];
        lm++;
        st=q;
            for(int i=0;i<a[q].size();i++){
                if(f[a[q][i]]==0){
                    s2=a[q][i];
                   //cout<<a[q][i]<<" ";
                   dist[a[q][i]]=dist[st]+1;
                    f[a[q][i]]=1;
                    if(fv[a[q][i]]==0){
                        coada[++p]=a[q][i];
                        lm=1;
                        fv[a[q][i]]=1;
                    }
                }r++;
            }

    }

    fout<<dist[s2]+1;








    return 0;
}