Submission #74522132


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
int n, m, f[200010];
inline int fnd(int x){return x == f[x]? x : f[x] = fnd(f[x]);}
int fa[200010], w[200010], kf[20][200010], d[200010], sz[200010];
int lca(int u, int v){
    if (d[u] < d[v])swap(u, v);
    for (int k = d[u] - d[v], i = 0; k >> i; ++i)
        if (k >> i & 1)u = kf[i][u];
    if (u == v)return u;
    for (int i = __lg(n); ~i; --i)
        if (kf[i][u] ^ kf[i][v])u = kf[i][u], v = kf[i][v];
    return fa[u];
}
constexpr int inf = 1e9+10;
inline int fd(int u, int mxw){
    for (int i = __lg(d[u]); ~i; --i)
        if (w[kf[i][u]] <= mxw)u = kf[i][u];
    return u;
}
int cal(int u, int v, int mxw){
    const int l = lca(u, v);
    if (w[l] <= mxw)return sz[fd(l, mxw)];
    return sz[fd(u, mxw)] + sz[fd(v, mxw)];
}
int main(){
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> m;
    vector<tuple<int, int, int> > V;
    for (int i = 1, u, v; i <= m; ++i){
        cin >> u >> v;
        V.emplace_back(i, u, v);
    }
    sort(V.begin(), V.end());
    iota(f + 1, f + n + n + 1, 1);
    int tot = n;
    fill_n(sz + 1, n, 1);
    for (auto [w, u, v] : V){
        u = fnd(u), v = fnd(v);
        if (u == v)continue;
        fa[u] = fa[v] = ++tot;
        f[u] = f[v] = tot;
        ::w[tot] = w;
        sz[tot] = sz[u] + sz[v];
    }
    copy_n(fa + 1, tot, kf[0] + 1);
    for (int i = 1; 1 << i <= tot; ++i)
        for (int j = 1; j <= tot; ++j)
            kf[i][j] = kf[i - 1][kf[i - 1][j]];
    for (int i = tot - 1; i; --i)d[i] = d[fa[i]] + 1;
    w[0] = inf;
    int q;
    cin >> q;
    while (q--){
        int u, v, c;
        cin >> u >> v >> c;
        int L = 0, R = inf, rs = -1;
        while (L <= R){
            int M = L + R >> 1;
            if (cal(u, v, M) >= c)rs = M, R = M - 1;
            else L = M + 1;
        }
        cout << rs << "\n";
    }
    return 0;
}

Submission Info

Submission Time
Task D - Stamp Rally
User szt100309
Language C++23 (GCC 15.2.0)
Score 1000
Code Size 1950 Byte
Status AC
Exec Time 736 ms
Memory 22860 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:59:23: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   59 |             int M = L + R >> 1;
      |                     ~~^~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 1
AC × 33
Set Name Test Cases
Sample 0_00.txt
All 0_00.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 3568 KiB
1_00.txt AC 390 ms 22164 KiB
1_01.txt AC 736 ms 22368 KiB
1_02.txt AC 300 ms 22860 KiB
1_03.txt AC 598 ms 22804 KiB
1_04.txt AC 304 ms 22604 KiB
1_05.txt AC 573 ms 22572 KiB
1_06.txt AC 310 ms 22488 KiB
1_07.txt AC 549 ms 22620 KiB
1_08.txt AC 319 ms 22148 KiB
1_09.txt AC 469 ms 22232 KiB
1_10.txt AC 386 ms 22228 KiB
1_11.txt AC 401 ms 22220 KiB
1_12.txt AC 440 ms 22220 KiB
1_13.txt AC 427 ms 22176 KiB
1_14.txt AC 519 ms 22196 KiB
1_15.txt AC 517 ms 22192 KiB
1_16.txt AC 419 ms 21852 KiB
1_17.txt AC 535 ms 21796 KiB
1_18.txt AC 532 ms 21680 KiB
1_19.txt AC 409 ms 22276 KiB
1_20.txt AC 512 ms 20628 KiB
1_21.txt AC 462 ms 22048 KiB
1_22.txt AC 528 ms 21524 KiB
1_23.txt AC 542 ms 21576 KiB
1_24.txt AC 568 ms 20512 KiB
1_25.txt AC 513 ms 21668 KiB
1_26.txt AC 482 ms 21040 KiB
1_27.txt AC 519 ms 21784 KiB
1_28.txt AC 480 ms 21704 KiB
1_29.txt AC 563 ms 20528 KiB
1_30.txt AC 529 ms 21592 KiB
1_31.txt AC 505 ms 20672 KiB