Submission #1140267

#TimeUsernameProblemLanguageResultExecution timeMemory
1140267OmarAlimammadzadeVinjete (COI22_vinjete)C++20
100 / 100
159 ms141672 KiB
#include <bits/stdc++.h>
// #define int long long //
using namespace std;

const int N = 1e5 + 1;
vector<array<int, 3>> g[N];
int t[N * 120], L[N * 120], R[N * 120], nxt;
int res[N], root[N], n, m;

int upd(int v, int l, int r, int ql, int qr) {
    int vn = ++nxt;
    if (ql <= l and r <= qr) t[vn] = r - l + 1;
    else {
        int m = (l + r) / 2;
        L[vn] = L[v], R[vn] = R[v];
        if (ql <= m) L[vn] = upd(L[v], l, m, ql, qr);
        if (m < qr) R[vn] = upd(R[v], m + 1, r, ql, qr);
        t[vn] = max(t[v], t[L[vn]] + t[R[vn]]);
    }
    return vn;
}

void dfs(int u, int p) {
    for (auto [v, l, r] : g[u])
        if (v != p) {
            root[v] = upd(root[u], 1, m, l, r);
            res[v] = t[root[v]];
            dfs(v, u);
        }
}


void _main() {
    cin >> n >> m;
    for (int i = 1; i < n; i++) {
        int u, v, l, r; cin >> u >> v >> l >> r;
        g[u].push_back({v, l, r});
        g[v].push_back({u, l, r});
    }
    dfs(1, 0);
    for (int i = 2; i <= n; i++) cout << res[i] << '\n';
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(0);
    // int _t; cin >> _t; while (_t--) //
    { _main(); cout << '\n'; }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...