Pagini recente » Cod sursa (job #68679) | Cod sursa (job #80787) | Cod sursa (job #1727220) | Cod sursa (job #3137412) | Cod sursa (job #320593)
Cod sursa(job #320593)
#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;
}