結果

問題 No.2634 Tree Distance 3
ユーザー ebi_fly
提出日時 2024-02-15 22:47:15
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,670 bytes
コンパイル時間 8,008 ms
コンパイル使用メモリ 338,416 KB
実行使用メモリ 40,772 KB
最終ジャッジ日時 2024-09-28 19:30:31
合計ジャッジ時間 18,739 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 2
other WA * 69
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include "testlib.h"

using ll = long long;

const ll MIN_N = 2, MAX_N = 200'000;
const ll MIN_A = 0, MAX_A = 1'000'000'000;

namespace ebi {

struct unionfind {
  private:
    std::vector<int> par;

  public:
    unionfind(int n = 0) : par(n, -1) {}

    bool same(int x, int y) {
        return leader(x) == leader(y);
    }

    bool merge(int x, int y) {
        x = leader(x);
        y = leader(y);
        if (x == y) return false;
        if (par[x] > par[y]) std::swap(x, y);
        par[x] += par[y];
        par[y] = x;
        return true;
    }

    int leader(int x) {
        if (par[x] < 0)
            return x;
        else
            return par[x] = leader(par[x]);
    }

    int size(int x) {
        return -par[leader(x)];
    }

    int count_group() {
        int c = 0;
        for (int i = 0; i < int(par.size()); i++) {
            if (par[i] < 0) c++;
        }
        return c;
    }

    void clear() {
        for (int i = 0; i < int(par.size()); i++) {
            par[i] = -1;
        }
    }
};

}  // namespace ebi

int main() {
    registerValidation();
    ll n = inf.readLong(MIN_N, MAX_N);
    inf.readEoln();
    for(int i: std::views::iota(0, n)) {
        inf.readLong(MIN_A, MAX_A);
        if(i < n-1) {
            inf.readSpace();
        }
        else {
            inf.readEoln();
        }
    }
    ebi::unionfind uf(n);
    for(int i_: std::views::iota(0, n-1)) {
        int u = inf.readLong(1ll, n) - 1;
        inf.readSpace();
        int v = inf.readLong(1ll, n) - 1;
        inf.readEoln();
        uf.merge(u, v);
    }
    ensure(uf.size(0) == n);
    inf.readEof();
    return 0;
}
0