Cod sursa(job #3340238)

Utilizator petro123Alex Ionel petro123 Data 13 februarie 2026 00:31:31
Problema Sortare topologica Scor 100
Compilator rs Status done
Runda Arhiva educationala Marime 1.3 kb
use std::fs::{self, File};
use std::io::{ BufWriter, Write};
use std::collections::VecDeque;
macro_rules! parse_line {
    ($iter : expr, $($t: ty),+) => {{
        let lines = $iter.next().unwrap();
        let mut parts = lines.split_whitespace();
        ($(parts.next().unwrap().parse::<$t>().unwrap()),+)
    }};
}

fn main() -> Result<(), std::io::Error> {
    let content = fs::read_to_string("sortaret.in")?;
    let mut lines = content.lines();
    let mut writer = BufWriter::new(File::create("sortaret.out")?);
    let (n, m) = parse_line!(lines, usize, usize);
    let mut adj: Vec<Vec<i32>> = vec![vec![]; n + 1];
    let mut indeg: Vec<i32> = vec![0; n + 1];
    for _ in 0..m {
        let (x, y) = parse_line!(lines, usize, i32);
        adj[x].push(y);
        indeg[y as usize] += 1;
    }
    let mut myq: VecDeque<i32> =VecDeque::new();
    for i in 1..n+1 {
        if indeg[i] == 0 {
            myq.push_back(i as i32);
        }
    }
    let mut topsort:Vec<i32>=vec![];
    while let Some(x)=myq.pop_front() {
        topsort.push(x);
        for &nei in &adj[x as usize] {
            indeg[nei as usize] -= 1;
            if indeg[nei as usize] == 0 {
                myq.push_back(nei);
            }
        }
    }
    for item in topsort {
        write!(writer,"{} ",item)?;
    }
    Ok(())  
}