結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
|
| 提出日時 | 2020-04-30 12:43:50 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 32 ms / 2,000 ms |
| コード長 | 1,483 bytes |
| コンパイル時間 | 13,187 ms |
| コンパイル使用メモリ | 392,268 KB |
| 実行使用メモリ | 11,904 KB |
| 最終ジャッジ日時 | 2024-12-15 05:48:47 |
| 合計ジャッジ時間 | 12,201 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
use std::io::*;
fn dfs(
g: &Vec<Vec<usize>>,
used: &mut [bool],
ord: &mut [usize],
low: &mut [usize],
cnt: &mut usize,
v: usize,
p: usize,
k: &mut usize,
) -> usize {
used[v] = true;
ord[v] = *k;
low[v] = *k;
*k += 1;
for &nv in g[v].iter() {
if !used[nv] {
*k = dfs(&g, used, ord, low, cnt, nv, v, k);
low[v] = std::cmp::min(low[v], low[nv]);
if ord[v] < low[nv] {
*cnt += 1;
}
} else if nv != p {
low[v] = std::cmp::min(low[v], ord[nv])
}
}
*k
}
fn main() {
let mut s: String = String::new();
std::io::stdin().read_to_string(&mut s).ok();
let mut itr = s.trim().split_whitespace();
let n: usize = itr.next().unwrap().parse().unwrap();
let mut g = vec![Vec::new(); n];
for _ in 0..n - 1 {
let a: usize = itr.next().unwrap().parse().unwrap();
let b: usize = itr.next().unwrap().parse().unwrap();
g[a].push(b);
g[b].push(a);
}
let mut con = 0;
let mut cnt = 0;
let mut k = 0;
let mut used = vec![false; n];
let mut ord = vec![0; n];
let mut low = vec![0; n];
for i in 0..n {
if !used[i] {
con += 1;
k = dfs(&g, &mut used, &mut ord, &mut low, &mut cnt, i, 0, &mut k);
}
}
if con >= 3 || (con == 2 && cnt > 0) {
println!("Alice",);
} else {
println!("Bob",)
}
}