結果

問題 No.3499 I Love DAG
コンテスト
ユーザー Naru820
提出日時 2026-03-28 02:21:15
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,763 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 9,002 ms
コンパイル使用メモリ 445,396 KB
実行使用メモリ 39,616 KB
最終ジャッジ日時 2026-04-17 19:48:41
合計ジャッジ時間 15,861 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 1
other TLE * 1 -- * 39
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;

const int MIN_N = 3;
const int MAX_N = 20000;
const int MAX_Q = 10000;

struct DSU {
    vector<int> parent;
    DSU(int n) {
        parent.resize(n);
        iota(parent.begin(), parent.end(), 0);
    }
    int find(int i) {
        if (parent[i] == i)
            return i;
        return parent[i] = find(parent[i]);
    }
    bool unite(int i, int j) {
        int root_i = find(i);
        int root_j = find(j);
        if (root_i != root_j) {
            parent[root_i] = root_j;
            return true;
        }
        return false;
    }
};

int main() {
    registerValidation();
    int N = inf.readInt(MIN_N, MAX_N);
    inf.readSpace();
    long long max_q_limit = min((long long)MAX_Q, 1LL * N * (N - 1) / 2);
    int Q = inf.readInt(1, max_q_limit);
    inf.readEoln();

    DSU dsu(N);
    set<pair<int, int>> edges;

    for (int i = 0; i < N - 1; ++i) {
        int u = inf.readInt(0, N - 1);
        inf.readSpace();
        int v = inf.readInt(0, N - 1);
        inf.readEoln();

        ensure(u != v);
        int min_v = min(u, v);
        int max_v = max(u, v);
        ensure(edges.insert({min_v, max_v}).second);
        ensure(dsu.unite(u, v));
    }
    for(int i = 0; i < N - 1; ++i){
        cout << 0 << (i == N - 2 ? "\n" : " ");
        cout.flush();
    }
    for (int i = 0; i < Q; ++i) {
        int u = inf.readInt(0, N - 1);
        inf.readSpace();
        int v = inf.readInt(0, N - 1);
        inf.readEoln();
        ensure(u != v);
        int min_v = min(u, v);
        int max_v = max(u, v);
        ensure(edges.insert({min_v, max_v}).second);
        cout << 0 << endl;
    }

    inf.readEof();
}
0