結果
| 問題 |
No.3350 Tree and Two Apples
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-12 21:44:55 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,212 bytes |
| コンパイル時間 | 7,501 ms |
| コンパイル使用メモリ | 323,596 KB |
| 実行使用メモリ | 15,460 KB |
| 最終ジャッジ日時 | 2025-11-13 21:23:39 |
| 合計ジャッジ時間 | 10,759 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 |
| other | WA * 35 |
ソースコード
#include<bits/stdc++.h>
#include "testlib.h"
using namespace std;
using ll = long long;
// 制約に書かれている定数を宣言
const ll Nmin = 1, Nmax = 100000;
struct UnionFind {
ll cnt;
vector<ll> par, siz;
UnionFind(ll N) : par(N, -1LL), siz(N, 1LL) {cnt = N;}
ll root(ll v) {
if (par[v] == -1) return v;
return par[v] = root(par[v]);
}
bool same(ll u, ll v) {
return root(u) == root(v);
}
bool unite(ll u, ll v) {
u = root(u); v = root(v);
if (u == v) return false;
if (siz[u] < siz[v]) swap(u, v);
par[v] = u;
siz[u] += siz[v];
cnt--;
return true;
}
ll size(ll v) {
v = root(v);
return siz[v];
}
ll count() {
return cnt;
}
};
int main(){
registerValidation();
int N = inf.readLong(Nmin, Nmax);
inf.readEoln();
UnionFind uf(N+1);
for(ll i = 0; i < N-1; i++){
ll u = inf.readLong(Nmin, Nmax);
inf.readSpace();
ll v = inf.readLong(Nmin, Nmax);
inf.readEoln();
assert(u < v);
assert(v <= N);
uf.unite(u, v);
}
assert(uf.count() == 2);
inf.readEof();
return 0;
}