Cod sursa(job #3001161)

Utilizator DKMKDMatei Filibiu DKMKD Data 13 martie 2023 11:57:09
Problema Zvon Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#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;
}