Cod sursa(job #3364841)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 12 septembrie 2026 11:41:19
Problema Sortare topologica Scor 100
Compilator rs Status done
Runda Arhiva educationala Marime 1.13 kb
use std::fs;
use std::io::{BufWriter, Write};

fn dfs(node: usize, graph: &Vec<Vec<usize>>, visited: &mut Vec<bool>, ans: &mut Vec<usize>) {
    visited[node] = true;
    for &son in &graph[node] {
        if visited[son] == false {
            dfs(son, graph, visited, ans);
        }
    }
    ans.push(node);
}

fn main() {

    let file = fs::File::create("sortaret.out").unwrap();
    let mut writer = BufWriter::new(file);

    let input: String = fs::read_to_string("sortaret.in").unwrap();
    let mut tokens = input.split_whitespace();

    let mut next_num = || -> usize {
        tokens.next().unwrap().parse::<usize>().unwrap()
    };

    let n = next_num();
    let m = next_num();

    let mut visited = vec![false; n + 1];
    let mut g: Vec<Vec<usize>> = vec![Vec::new(); n + 1];
    for _ in 0..m {
        let (x, y) = (next_num(), next_num());
        g[x].push(y);
    }

    let mut ans: Vec<usize> = Vec::new();
    for node in 1..=n {
        if visited[node] == false {
            dfs(node, &g, &mut visited, &mut ans);
        }
    }

    for node in ans.iter().rev() {
        write!(writer, "{} ", node).unwrap();
    }

}