1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use std::io;
use std::cmp::max;


fn main() {
    let stdin = io::stdin();
    let mut input: Vec<Vec<i32>> = Vec::new();
    for line in stdin.lines() {
        input.push(line.unwrap().split_whitespace().map(|x| x.parse::<i32>().unwrap() as i32).collect());
    }
    // reading input and storing into vec<vec<int>> is done now

    for i in 0..input.len() {
        input[i] = input[i][1..input[i].len()].to_vec();
    }
    input[0] = vec![0; input[0][0] as usize];

    let mut ret: i64 = 0;
    let mut prev_audience  : Vec<i32> = Vec::new();
    let mut prev_day_graph : Vec<i32> = Vec::new();

    while input.len() > 0 {
        let day_graph: Vec<i32> = input.pop().unwrap();
        if day_graph.len() > 0 {
            let mut audience: Vec<i32> = vec![1; day_graph.len() as usize];
            for i in 0..prev_audience.len() {
                let a: i32 = prev_day_graph[i];
                if a != 0 {
                    audience[(a-1) as usize] += prev_audience[i];
                }
            }
            prev_audience = audience.clone().into_iter().map(|x| if x > 1 { x-1 } else { x }).collect();
            prev_day_graph = day_graph.clone();
            let prev_audience_sum: i64 = prev_audience.clone().into_iter().reduce(|x,y| x + y).unwrap().into();
            ret = max(ret, prev_audience_sum);
        }
    }
    print!("{}", ret);
}