結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
|
| 提出日時 | 2020-02-01 06:19:09 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 996 bytes |
| コンパイル時間 | 1,991 ms |
| コンパイル使用メモリ | 196,920 KB |
| 最終ジャッジ日時 | 2025-01-08 21:33:50 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 24 WA * 2 |
ソースコード
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
bool dfs (int cur, const vector<vector<int>>& g, vector<int>& order, vector<int>& reach) {
bool res = false;
reach[cur] = order[cur];
for (int nbr : g[cur]) {
if (order[nbr] == INF) {
order[nbr] = order[cur] + 1;
res |= dfs (nbr, g, order, reach);
}
reach[cur] = min(reach[cur], order[nbr]);
}
return res | (reach[cur] >= order[cur]);
}
signed main() {
ios::sync_with_stdio(false); cin.tie(0);
int n;
cin >> n;
vector<vector<int>> g(n);
for (int i = 0; i + 1 < n; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
vector<int> order(n, INF);
vector<int> reach(n, INF);
int c = 0;
bool b = false;
for (int i = 0; i < n; i++) {
if (order[i] == INF) {
c++;
order[i] = 0;
b = dfs (i, g, order, reach);
}
}
if (c > 1 && b) cout << "Alice\n";
else cout << "Bob\n";
return 0;
}