結果

問題 No.3719 Share the Tree
コンテスト
ユーザー hiro1729
提出日時 2026-09-18 21:35:37
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 120 ms / 2,000 ms
+ 1µs
コード長 1,377 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,380 ms
コンパイル使用メモリ 344,396 KB
実行使用メモリ 6,400 KB
平均クエリ数 2.00
最終ジャッジ日時 2026-09-18 21:35:56
合計ジャッジ時間 6,341 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);

	string S; cin >> S;
	int N; cin >> N;
	int k = N - 2;
	cout << k << endl;
	if (S == "Alice") {
		vector<vector<int>> g(N);
		vector<int> d(N);
		for (int i = 0; i < N - 1; i++) {
			int u, v; cin >> u >> v;
			u--; v--;
			g[u].push_back(v);
			g[v].push_back(u);
			d[u]++; d[v]++;
		}
		priority_queue<int, vector<int>, greater<int>> pq;
		for (int i = 0; i < N; i++) {
			if (d[i] == 1) {
				pq.push(i);
			}
		}
		vector<bool> ch(N);
		vector<int> A(N - 2);
		for (int i = 0; i < N - 2; i++) {
			int u = pq.top(); pq.pop();
			for (int v: g[u]) {
				d[v]--;
				if (d[v] == 1) pq.push(v);
				if (!ch[v]) A[i] = v + 1;
			}
			ch[u] = true;
		}
		for (int i = 0; i < N - 2; i++) {
			cout << A[i] << (i == N - 3 ? '\n' : ' ');
		}
		cout << flush;
	} else {
		vector<int> A(N - 2);
		for (int i = 0; i < N - 2; i++) {
			cin >> A[i]; A[i]--;
		}
		vector<bool> ch(N);
		for (int i = 0; i < N - 2; i++) {
			vector<bool> ok = ch;
			for (int j = i; j < N - 2; j++) ok[A[j]] = true;
			for (int j = 0; j < N; j++) {
				if (!ok[j]) {
					ch[j] = true;
					cout << A[i] + 1 << ' ' << j + 1 << '\n';
					break;
				}
			}
		}
		vector<int> s;
		for (int i = 0; i < N; i++) {
			if (!ch[i]) s.push_back(i);
		}
		cout << s[0] + 1 << ' ' << s[1] + 1 << endl;
	}
}
0