Cod sursa(job #3364824)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 12 septembrie 2026 01:02:59
Problema Sortare topologica Scor 100
Compilator rs Status done
Runda Arhiva educationala Marime 1.15 kb
use std::fs;
use std::io::{BufWriter, Write};
use std::collections::VecDeque;

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 grade: Vec<usize> = vec![0; 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);
        grade[y] += 1;
    }

    let mut q: VecDeque<usize> = VecDeque::new();
    for node in 1..=n {
        if grade[node] == 0 {
            q.push_back(node);
        }
    }

    let mut sol: Vec<usize> = Vec::new();
    while let Some(node) = q.pop_front() {
        sol.push(node);
        for &son in &g[node]{
            grade[son] -= 1;
            if grade[son] == 0 {
                q.push_back(son);
            }
        }
    }

    for node in sol {
        write!(writer, "{} ", node).unwrap();
    }

}