aizu_online_judge/grl/
grl_4_b.rs

1#[doc(no_inline)]
2pub use competitive::graph::DirectedGraphScanner;
3use competitive::prelude::*;
4
5#[verify::aizu_online_judge("GRL_4_B", judge = "judge_grl_4_b")]
6pub fn grl_4_b(reader: impl Read, mut writer: impl Write) {
7    let s = read_all_unchecked(reader);
8    let mut scanner = Scanner::new(&s);
9    scan!(scanner, vs, es, (graph, _): @DirectedGraphScanner::<usize, ()>::new(vs, es));
10    for u in graph.topological_sort().into_iter() {
11        writeln!(writer, "{}", u).ok();
12    }
13}
14
15pub fn judge_grl_4_b(input: impl Read, _output: impl Read, result: impl Read) -> bool {
16    let (s_in, s_res) = (read_all_unchecked(input), read_all_unchecked(result));
17    let (mut scanner_in, mut scanner_res) = (Scanner::new(&s_in), Scanner::new(&s_res));
18    scan!(scanner_in, vs, es, edges: [(usize, usize)]);
19    let mut ord = vec![!0usize; vs];
20    let mut is_ac = true;
21    for (i, u) in scanner_res.iter::<usize>().take(vs).enumerate() {
22        is_ac &= ord[u] == !0usize;
23        ord[u] = i;
24    }
25    for (u, v) in edges.take(es) {
26        is_ac &= ord[u] < ord[v];
27    }
28    is_ac
29}