Pagini recente » Cod sursa (job #2670500) | Cod sursa (job #470520) | Cod sursa (job #2625022) | Cod sursa (job #2700458) | Cod sursa (job #141426)
Cod sursa(job #141426)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
class Nod {
public:
Nod() :
val(0)
{
}
vector< Nod* > c;
int val;
};
int n;
vector<Nod> noduri;
void calculeaza_valori(Nod *n) {
if (0 == (int)n->c.size())
return;
vector<int> v;
for (int i(0); i < (int)n->c.size(); ++i) {
calculeaza_valori(n->c[i]);
v.push_back(n->c[i]->val);
}
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
int cur = v[0];
int tot = cur + 1;
for (int i(1); i < (int)v.size(); ++i, --cur)
if (cur == v[i]) {
++tot;
++cur;
}
n->val = tot;
}
int main(int argc, char *argv[]) {
ifstream fin("zvon.in");
int T;
fin >> T;
ofstream fout("zvon.out");
for (int t(0); t < T; ++t) {
fin >> n;
noduri.clear();
noduri.insert(noduri.begin(), n, Nod());
int a, b;
for (int i(0); i < n - 1; ++i) {
fin >> a >> b;
noduri[a - 1].c.push_back(&noduri[b - 1]);
}
calculeaza_valori(&noduri[0]);
// for (int i(0); i < n; ++i)
// cout << i << ": " << noduri[i].val << endl;
// cout << endl;
fout << noduri[0].val << endl;
}
fout.close();
fin.close();
return 0;
}