Skip to main content

aizu_online_judge/grl/
grl_4_b.rs

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