結果
| 問題 | No.1316 Maximum Minimum Spanning Tree |
| コンテスト | |
| ユーザー |
opt
|
| 提出日時 | 2020-11-28 15:40:58 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,566 bytes |
| 記録 | |
| コンパイル時間 | 6,511 ms |
| コンパイル使用メモリ | 335,424 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-06-15 12:14:21 |
| 合計ジャッジ時間 | 11,322 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 RE * 1 |
| other | WA * 14 RE * 64 |
ソースコード
#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;
#define rep2(i, m, n) for (int i = (m); i < (n); ++i)
#define rep(i, n) rep2(i, 0, n)
const int MIN_N = 2;
const int MAX_N = 100;
const int MAX_M = 100;
const int MIN_D = 1;
const int MAX_D = 1e8;
const int MIN_c = 1;
const int MAX_c = 1e8;
const int MIN_d = 1;
const int MAX_d = 1e8;
struct UnionFind {
vector<int> d;
int m; // number of connected components
UnionFind(int n = 0) : d(n, -1), m(n) {}
int find(int x) {
if (d[x] < 0) return x;
return d[x] = find(d[x]);
}
bool unite(int x, int y) {
x = find(x), y = find(y);
if (x == y) return false;
if (d[x] > d[y]) swap(x, y);
d[x] += d[y];
d[y] = x;
--m;
return true;
}
bool same(int x, int y) { return find(x) == find(y); }
int size(int x) { return -d[find(x)]; }
};
signed main(int argc, char* argv[]) {
registerValidation(argc, argv);
int N = inf.readInt(MIN_N, MAX_N, "N");
inf.readSpace();
int M = inf.readInt(N-1, MAX_M, "M");
inf.readSpace();
int D = inf.readInt(MIN_D, MAX_D, "D");
inf.readEoln();
set<pair<int, int>> S;
UnionFind uf(N);
rep(i, M) {
int a = inf.readInt(1, N, "a");
inf.readSpace();
int b = inf.readInt(1, N, "b");
inf.readSpace();
int c = inf.readInt(MIN_c, MAX_c, "c");
inf.readSpace();
int d = inf.readInt(MIN_d, MAX_d, "d");
inf.readEoln();
assert(S.find({a, b}) == S.end());
assert(S.find({b, a}) == S.end());
S.emplace(a, b);
uf.unite(a, b);
}
assert(uf.m == 1);
inf.readEof();
}
opt