Pagini recente » Cod sursa (job #2141646) | Cod sursa (job #2948518) | Cod sursa (job #200306) | Cod sursa (job #1574758) | Cod sursa (job #1792371)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
class Parser {
public:
Parser() = default;
Parser(const char *fn) {
c = 0;
fin = fopen(fn, "r");
fread(b, SIZE, 1, fin);
}
inline Parser& operator >>(int &v) {
v = 0;
while (!isdigit(b[c])) plusC();
while (isdigit(b[c])) {
v = (v << 1) + (v << 3) + b[c] - '0';
plusC();
}
return *this;
}
private:
inline void plusC() {
c++;
if (c == SIZE) {
c = 0;
fread(b, SIZE, 1, fin);
}
}
static const int SIZE = 1 << 17;
char b[SIZE];
int c;
FILE *fin;
};
int t;
int n;
int treq[NMAX];
vector <int> G[NMAX];
void Reset() {
for (int i = 1; i <= n; i++) {
treq[i] = 0;
G[i].clear();
}
}
void Dfs(int u) {
treq[u] = 0;
for (int v: G[u]) Dfs(v);
sort(begin(G[u]), end(G[u]), [] (int a, int b) { return treq[a] > treq[b]; });
for (int i = 0; i < G[u].size(); i++)
treq[u] = max(treq[u], treq[G[u][i]] + i + 1);
}
int main() {
Parser f("zvon.in");
ofstream g("zvon.out");
f >> t;
while (t--) {
f >> n;
Reset();
for (int i = 1; i < n; i++) {
int u, v;
f >> u >> v;
G[u].push_back(v);
}
Dfs(1);
g << treq[1] << "\n";
}
return 0;
}