Cod sursa(job #320593)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 5 iunie 2009 10:17:56
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <pthread.h>

using namespace std;

ifstream fin("zvon.in");
ofstream fout("zvon.out");

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

struct Graph {
    char ntest;
    vector<vector<int> > G;
    int rez;


    int Dfs(int x) {
        if(G[x].size() == 0)
            return 1;

        vector<int> V(G[x].size());

        for(int i=0; i<G[x].size(); i++)
            V[i] = Dfs (G[x][i]);

        sort(V.begin(), V.end(), cmp);

        V[0]++;

        for(int i=1; i<V.size(); i++)
            if(V[0]<V[i]+i+1) V[0]=V[i]+i+1;

        return V[0];
    }

};

vector<Graph> Args;

void *Df (void* arg) {
    char n = *((char*)arg);
    //cout<<"starting thread #"<<(int)n<<endl;
    Args[n].rez = Args[n].Dfs(0)-1;
    return 0;
}

Graph ReadData(char c) {
    Graph ret;
    ret.ntest = c;
    int n,x,y;
    fin>>n;
    ret.G.assign(n, vector<int>(0));
    while (--n) {
        fin>>x>>y;
        ret.G[x-1].push_back(y-1);
    }
    ret.rez = 0;
    return ret;
}

int main() {
    int t;
    fin>>t;
    pthread_t threads[t];

    //cout<<t<<endl;

    for(char test = 0; test<(char)t; test++) {
        Args.push_back(ReadData(test));
//        pthread_create(threads+test, NULL, Df, &test);
        (*Df)(&test);
    }

    //cout<<Args.size()<<endl;

    for(char test = 0; test<(char)t; test++) {
//        pthread_join(threads[test], NULL);
        fout<<Args[test].rez<<endl;
    }

    fin.close();
    fout.close();
    return 0;
}