結果
| 問題 |
No.566 だいたい完全二分木
|
| コンテスト | |
| ユーザー |
sekiya9311
|
| 提出日時 | 2017-09-09 00:13:13 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,331 bytes |
| コンパイル時間 | 1,721 ms |
| コンパイル使用メモリ | 171,280 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-07 12:29:06 |
| 合計ジャッジ時間 | 3,076 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 RE * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
vector<int> G[11111];
int memo[1111];
int cnt = 0;
void dfs(int now, int prev) {
if (memo[now] == -1) {
memo[now] = ++cnt;
}
for (int e : G[now]) {
if (e != prev) {
dfs(e, now);
}
}
}
void makePerfectBinaryTree(int k) {
vector<int> v((1 << (k - 1)));
v[0] = 1;
for (int i = 1; i < v.size(); i++) {
v[i] = v[i - 1] + 2;
}
while (v.size() > 1) {
vector<int> nv;
for (int i = 0; i < v.size(); i += 2) {
const int buf = (v[i] + v[i + 1]) / 2;
nv.emplace_back(buf);
G[buf].emplace_back(v[i]);
G[buf].emplace_back(v[i + 1]);
G[v[i]].emplace_back(buf);
G[v[i + 1]].emplace_back(buf);
}
swap(nv, v);
}
}
int main() {
int k;
cin >> k;
if (k == 2) {
cout << "1 3 2" << endl;
return 0;
}
makePerfectBinaryTree(k);
memset(memo, -1, sizeof(memo));
dfs(1 << (k - 1), -1);
vector<int> res((1 << k) - 1);
for (int i = 1; i <= (1 << k) - 1; i++) {
res[memo[i] - 1] = i;
}
swap(res[1], res[res.size() - 1]);
for (int i = 0; i < res.size(); i++) {
printf("%d%c", res[i], (i + 1 == res.size() ? '\n' : ' '));
}
return 0;
}
sekiya9311