提出 #41166690


ソースコード 拡げる

#![allow(unused)]

fn main() {
    let inp = readv::<usize>();
    let (n, m) = (inp[0], inp[1]);
    let mut adj = vec![vec![]; n];
    for _ in 0..m {
        let inp = readv::<usize>();
        let (u, v) = (inp[0] - 1, inp[1] - 1);
        adj[u].push(v);
    }

    // dp[u] = lenght of the longest path ending at u
    // dp[u] = max(dp[v] + 1 for v in child(u))
    let mut dp = vec![0; n];

    let mut sort = topological_sort(&adj);
    sort.reverse();
    dp[sort[0]] = 0;
    for &u in sort[1..].iter() {
        for &v in adj[u].iter() {
            dp[u] = dp[u].max(dp[v] + 1);
        }
    }

    println!("{}", dp.iter().max().unwrap());
}

fn topological_sort(adj: &Vec<Vec<usize>>) -> Vec<usize> {
    let n = adj.len();
    let mut indeg = vec![0; n];
    for u in 0..n {
        for &v in adj[u].iter() {
            indeg[v] += 1;
        }
    }

    let mut que = std::collections::VecDeque::new();
    for u in 0..n {
        if indeg[u] == 0 {
            que.push_back(u);
        }
    }

    let mut nodes = vec![];
    while let Some(u) = que.pop_front() {
        nodes.push(u);
        for &v in adj[u].iter() {
            indeg[v] -= 1;
            if indeg[v] == 0 {
                que.push_back(v);
            }
        }
    }

    nodes
}

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn readv<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_ascii_whitespace()
        .map(|t| t.parse().ok().unwrap())
        .collect()
}

fn reads() -> Vec<char> {
    read::<String>().chars().collect::<Vec<char>>()
}

fn join<T: ToString>(arr: &[T], sep: &str) -> String {
    arr.iter()
        .map(|x| x.to_string())
        .collect::<Vec<String>>()
        .join(sep)
}

提出情報

提出日時
問題 G - Longest Path
ユーザ amoshuangyc
言語 Rust (1.42.0)
得点 100
コード長 1916 Byte
結果 AC
実行時間 53 ms
メモリ 8784 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 22
セット名 テストケース
All 0_00, 0_01, 0_02, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17, 1_18
ケース名 結果 実行時間 メモリ
0_00 AC 6 ms 1944 KiB
0_01 AC 1 ms 2024 KiB
0_02 AC 1 ms 2032 KiB
1_00 AC 3 ms 2032 KiB
1_01 AC 48 ms 8784 KiB
1_02 AC 32 ms 3200 KiB
1_03 AC 45 ms 8216 KiB
1_04 AC 43 ms 5576 KiB
1_05 AC 41 ms 4612 KiB
1_06 AC 43 ms 4012 KiB
1_07 AC 36 ms 3592 KiB
1_08 AC 34 ms 3440 KiB
1_09 AC 34 ms 3356 KiB
1_10 AC 33 ms 3276 KiB
1_11 AC 41 ms 4212 KiB
1_12 AC 53 ms 7276 KiB
1_13 AC 47 ms 6364 KiB
1_14 AC 42 ms 4440 KiB
1_15 AC 39 ms 4036 KiB
1_16 AC 45 ms 6008 KiB
1_17 AC 50 ms 7824 KiB
1_18 AC 47 ms 5076 KiB