Pagini recente » Cod sursa (job #3364631) | Cod sursa (job #3364627) | Cod sursa (job #3364825) | Cod sursa (job #3365974) | Cod sursa (job #3364824)
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();
}
}