結果
| 問題 | No.1308 ジャンプビーコン |
| コンテスト | |
| ユーザー |
やむなく
|
| 提出日時 | 2020-12-01 23:28:43 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,807 bytes |
| 記録 | |
| コンパイル時間 | 7,590 ms |
| コンパイル使用メモリ | 335,816 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-06-15 13:32:43 |
| 合計ジャッジ時間 | 8,941 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 37 |
ソースコード
//
// validator (writer)
//
#include <bits/stdc++.h>
#include "testlib.h"
using namespace std;
const int MIN_N = 2;
const int MAX_N = 3000;
const int MIN_Q = 2;
const int MAX_Q = 3000;
const int MIN_C = 1;
const int MAX_C = 1000000000;
const int MIN_L = 1;
const int MAX_L = 1000000000;
// from ACL
struct dsu {
public:
dsu() : _n(0) {}
dsu(int n) : _n(n), parent_or_size(n, -1) {}
int merge(int a, int b) {
assert(0 <= a && a < _n);
assert(0 <= b && b < _n);
int x = leader(a), y = leader(b);
if (x == y) return x;
if (-parent_or_size[x] < -parent_or_size[y]) std::swap(x, y);
parent_or_size[x] += parent_or_size[y];
parent_or_size[y] = x;
return x;
}
bool same(int a, int b) {
assert(0 <= a && a < _n);
assert(0 <= b && b < _n);
return leader(a) == leader(b);
}
int leader(int a) {
assert(0 <= a && a < _n);
if (parent_or_size[a] < 0) return a;
return parent_or_size[a] = leader(parent_or_size[a]);
}
int size(int a) {
assert(0 <= a && a < _n);
return -parent_or_size[leader(a)];
}
std::vector<std::vector<int>> groups() {
std::vector<int> leader_buf(_n), group_size(_n);
for (int i = 0; i < _n; i++) {
leader_buf[i] = leader(i);
group_size[leader_buf[i]]++;
}
std::vector<std::vector<int>> result(_n);
for (int i = 0; i < _n; i++) {
result[i].reserve(group_size[i]);
}
for (int i = 0; i < _n; i++) {
result[leader_buf[i]].push_back(i);
}
result.erase(std::remove_if(
result.begin(), result.end(),
[&](const std::vector<int> &v) { return v.empty(); }),
result.end());
return result;
}
private:
int _n;
// root node: -1 * component size
// otherwise: parent
std::vector<int> parent_or_size;
};
int main() {
registerValidation();
int n = inf.readInt(MIN_N, MAX_N);
inf.readSpace();
int q = inf.readInt(MIN_Q, MAX_Q);
inf.readSpace();
int c = inf.readInt(MIN_C, MAX_C);
inf.readEoln();
dsu uf(n);
for (int i = 0; i < n - 1; i++) {
int u = inf.readInt(1, n);
inf.readSpace();
int v = inf.readInt(1, n);
inf.readSpace();
int l = inf.readInt(MIN_L, MAX_L);
inf.readEoln();
u--, v--;
ensure(!uf.same(u, v));
uf.merge(u, v);
}
int pre = -1;
for (int i = 0; i < q; i++) {
int x = inf.readInt(1, n);
if (i < q - 1)
inf.readSpace();
else
inf.readEoln();
ensure(x != pre);
pre = x;
}
inf.readEof();
return 0;
}
やむなく