結果
問題 | No.2780 The Bottle Imp |
ユーザー | Yukino DX. |
提出日時 | 2024-06-08 11:21:55 |
言語 | Rust (1.77.0 + proconio) |
結果 |
AC
|
実行時間 | 109 ms / 2,000 ms |
コード長 | 2,616 bytes |
コンパイル時間 | 24,145 ms |
コンパイル使用メモリ | 378,968 KB |
実行使用メモリ | 54,784 KB |
最終ジャッジ日時 | 2024-06-08 11:22:24 |
合計ジャッジ時間 | 24,020 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 1 ms
5,248 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | AC | 0 ms
5,376 KB |
testcase_05 | AC | 1 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 42 ms
19,200 KB |
testcase_08 | AC | 45 ms
19,328 KB |
testcase_09 | AC | 43 ms
19,200 KB |
testcase_10 | AC | 47 ms
19,328 KB |
testcase_11 | AC | 41 ms
19,200 KB |
testcase_12 | AC | 100 ms
39,552 KB |
testcase_13 | AC | 109 ms
39,424 KB |
testcase_14 | AC | 15 ms
7,552 KB |
testcase_15 | AC | 15 ms
7,552 KB |
testcase_16 | AC | 15 ms
7,424 KB |
testcase_17 | AC | 14 ms
7,680 KB |
testcase_18 | AC | 15 ms
7,552 KB |
testcase_19 | AC | 14 ms
7,552 KB |
testcase_20 | AC | 14 ms
7,552 KB |
testcase_21 | AC | 16 ms
7,552 KB |
testcase_22 | AC | 13 ms
7,424 KB |
testcase_23 | AC | 14 ms
7,168 KB |
testcase_24 | AC | 35 ms
16,256 KB |
testcase_25 | AC | 69 ms
28,160 KB |
testcase_26 | AC | 24 ms
11,776 KB |
testcase_27 | AC | 17 ms
12,160 KB |
testcase_28 | AC | 16 ms
12,160 KB |
testcase_29 | AC | 25 ms
17,920 KB |
testcase_30 | AC | 21 ms
17,024 KB |
testcase_31 | AC | 34 ms
22,912 KB |
testcase_32 | AC | 6 ms
5,376 KB |
testcase_33 | AC | 46 ms
32,512 KB |
testcase_34 | AC | 84 ms
54,784 KB |
testcase_35 | AC | 6 ms
5,376 KB |
testcase_36 | AC | 1 ms
5,376 KB |
testcase_37 | AC | 1 ms
5,376 KB |
testcase_38 | AC | 7 ms
5,376 KB |
testcase_39 | AC | 30 ms
20,608 KB |
testcase_40 | AC | 30 ms
20,736 KB |
testcase_41 | AC | 31 ms
20,736 KB |
testcase_42 | AC | 1 ms
5,376 KB |
testcase_43 | AC | 0 ms
5,376 KB |
ソースコード
use std::collections::VecDeque; use proconio::{input, marker::Usize1}; fn main() { input! { n:usize, a:[[Usize1];n], } let mut g = vec![vec![]; n]; let mut rg = vec![vec![]; n]; for i in 0..n { for &j in a[i].iter() { g[i].push(j); rg[j].push(i); } } let mut ord = vec![]; let mut vis = vec![false; n]; for i in 0..n { if vis[i] { continue; } dfs(i, &g, &mut vis, &mut ord); } ord.reverse(); for i in 0..n { vis[i] = false; } let mut groups = vec![]; let mut newvs = vec![0; n]; let mut newv = 0; for &v in ord.iter() { if vis[v] { continue; } let mut group = vec![]; dfs1(v, &rg, &mut vis, &mut group); for &u in group.iter() { newvs[u] = newv; } newv += 1; groups.push(group); } let newn = groups.len(); let mut newg = vec![vec![]; newn]; let mut newrg = vec![vec![]; newn]; let mut indegs = vec![0; newn]; for i in 0..n { for &j in a[i].iter() { if newvs[i] == newvs[j] { continue; } newg[newvs[i]].push(newvs[j]); newrg[newvs[j]].push(newvs[i]); indegs[newvs[j]] += 1; } } let mut q = VecDeque::new(); for i in 0..newn { if indegs[i] == 0 { q.push_back(i); } } let mut topo = vec![]; while let Some(crr) = q.pop_front() { topo.push(crr); for &nxt in newg[crr].iter() { if indegs[nxt] == 0 { continue; } indegs[nxt] -= 1; if indegs[nxt] == 0 { q.push_back(nxt); } } } topo.reverse(); let mut dp = vec![0; newn]; for i in 0..newn { for &j in newrg[topo[i]].iter() { dp[j] = dp[j].max(dp[topo[i]] + 1); } } let ans = dp[newvs[0]] + 1 == newn; println!("{}", if ans { "Yes" } else { "No" }); } fn dfs(crr: usize, g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, ord: &mut Vec<usize>) { vis[crr] = true; for &nxt in g[crr].iter() { if vis[nxt] { continue; } dfs(nxt, g, vis, ord); } ord.push(crr); } fn dfs1(crr: usize, g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, group: &mut Vec<usize>) { vis[crr] = true; group.push(crr); for &nxt in g[crr].iter() { if vis[nxt] { continue; } dfs1(nxt, g, vis, group); } }