Pagini recente » Cod sursa (job #2163005) | Cod sursa (job #1140482) | Cod sursa (job #667953) | Cod sursa (job #2384337) | Cod sursa (job #2249444)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> angs[100010];
int angajati;
bool compar(int a, int b) {
return angs[b].size() < angs[a].size();
}
int main(int argc, char** argv) {
ifstream fi("zvon.in");
ofstream fo("zvon.out");
int teste;
int angajati;
fi >> teste;
for (int i = 0; i < teste; ++i) {
fi >> angajati;
if (angajati > 1) {
int x, y;
memset(angs, 0, sizeof(angs));
for (int j = 0; j < angajati - 1; ++j) {
fi >> x >> y;
angs[x - 1].push_back(y - 1);
}
queue< pair<int, int> > order;
for (int j = 0; j < angajati; j++) {
if (angs[j].size() > 1)
sort(angs[j].begin(), angs[j].end(), compar);
// cout <<j <<" : ";
// for (size_t k = 0; k < angs[j].size(); k++) {
// cout << angs[j][k] << " ";
// }
// cout << "\n";
}
order.push(make_pair(0, 0));
int mm = 0;
while (1) {
pair<int, int> x = order.front();
order.pop();
if (x.second > mm)
mm = x.second;
for (unsigned int vec = 0; vec < angs[x.first].size(); vec++)
order.push(make_pair(angs[x.first][vec], x.second + 1 + vec));
if (order.empty()) {
fo << mm << "\n";
break;
}
}
} else {
fo << "0\n" << flush;
}
}
return 0;
}