結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
bal4u
|
| 提出日時 | 2020-02-24 09:35:28 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 9 ms / 2,000 ms |
| コード長 | 1,138 bytes |
| コンパイル時間 | 280 ms |
| コンパイル使用メモリ | 30,720 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-11 22:07:40 |
| 合計ジャッジ時間 | 2,012 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
// yuki 977 アリス仕掛けの摩天楼
// 2020.2.24 bal4u
#include <stdio.h>
int getchar_unlocked(void);
#define gc() getchar_unlocked()
int in() { // 整数の入力
int n = 0; int c = gc();
do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
return n;
}
#define MAX 100005
/* UNION-FIND library */
int id[MAX], size[MAX];
void init(int n) { int i; for (i = 0; i < n; i++) id[i] = i, size[i] = 1; }
int root(int i) { while (i != id[i]) id[i] = id[id[i]], i = id[i]; return i; }
int connected(int p, int q) { return root(p) == root(q); }
void unite(int p, int q) {
int i = root(p), j = root(q); if (i == j) return;
if (size[i] < size[j]) id[i] = j, size[j] += size[i]; else id[j] = i, size[i] += size[j];
}
int hi[MAX];
int main()
{
int i, a, b, n, N;
static char *ans[] = { "Alice", "Bob" };
N = in();
init(N);
for (i = 1; i < N; ++i) {
a = in(), b = in();
hi[a]++, hi[b]++;
unite(a, b);
}
a = 0;
n = size[root(0)];
if (n == 1) n = size[root(1)];
if (n == N) a = 1;
else if (n == N-1) {
for (i = 0; i < N; ++i) {
if (hi[i] == 1) break;
}
if (i == N) a = 1;
}
puts(ans[a]);
return 0;
}
bal4u