Cod sursa(job #1887334)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 21 februarie 2017 15:37:54
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#define N 100005
using namespace std;

vector<int> graf[N];
int teste,n,i,a,b,sol;
int t[N];               //t[i]=timpul necesar subarboreluj care incepe cu i pentru a trimite informatia
bool viz[N];

bool cond(int a, int b)
{
    return a>b;
}

void dfs(int x)
{

    int i,tmax,m;
    vector<int> fii;

    viz[x]=true;
    tmax=0;

    for(i=0;i<graf[x].size();i++)
    {
        dfs(graf[x][i]);
        fii.push_back(t[graf[x][i]]);
    }

    sort(fii.begin(),fii.end(),cond);

    for(i=0,m=1; i<fii.size(); i++,m++)
        if(m+fii[i]>tmax)
            tmax=m+fii[i];

    //for(i=0;i<fii.size();i++)
    //   printf("%d ",fii[i]);
    //printf("\n");

    t[x]=tmax;
}

void sterge()
{
    for(int i=1;i<=n;i++)
    {
        viz[i]=false;
        graf[i].clear();
        t[i]=0;
    }
}

int main()
{
    FILE *f1,*f2;
    f1=fopen("zvon.in","r");
    f2=fopen("zvon.out","w");

    fscanf(f1,"%d",&teste);

    while(teste--)
    {
        ///citire
        fscanf(f1,"%d",&n);
        for(i=1;i<n;i++)
        {
            fscanf(f1,"%d%d",&a,&b);
            graf[a].push_back(b);
        }

        ///rezolvare

        sol=0;
        for(i=1;i<=n;i++)
        {
            if(!viz[i])
                dfs(i);
            if(t[i]>sol)
                sol=t[i];
        }
        fprintf(f2,"%d\n",sol);

        sterge();
    }

    return 0;
}