結果
| 問題 | No.3499 I Love DAG |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-03-28 02:18:59 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,688 bytes |
| 記録 | |
| コンパイル時間 | 8,541 ms |
| コンパイル使用メモリ | 447,688 KB |
| 実行使用メモリ | 45,632 KB |
| 最終ジャッジ日時 | 2026-04-17 19:48:10 |
| 合計ジャッジ時間 | 15,470 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 1 |
| other | TLE * 1 -- * 39 |
ソースコード
#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
#define all(a) begin(a), end(a)
#define space inf.readChar(' ')
#define endl inf.readChar('\n')
#define eof inf.readEof()
tuple<ll> read(ll min, ll max){
ll a = inf.readLong(min, max);
endl;
return tuple{a};
}
template<class... T> auto read(ll min, ll max, T... t){
ll a = inf.readLong(min, max);
space;
return tuple_cat(tuple{a}, read(t...));
}
string read(string p){
return inf.readLine(p);
}
vector<ll> reads(ll N, ll min, ll max){
auto a = inf.readLongs(N, min, max);
endl;
return a;
}
vector<string> read_lines(ll N, string p){
return inf.readLines(N, p);
}
template<class... T> auto read_lines(ll N, T... t){
vector<decltype(read(t...))> a;
a.reserve(N);
while(N--) a.push_back(read(t...));
return a;
}
vector<vector<ll>> read_matrix(ll H, ll W, ll min, ll max){
vector<vector<ll>> ans(H);
for(auto& v : ans) v = reads(W, min, max);
return ans;
}
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();
}