Pagini recente » Cod sursa (job #3364824) | Cod sursa (job #3364826) | Cod sursa (job #3365306) | Cod sursa (job #3364625) | Cod sursa (job #3364827)
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 sol: Vec<usize> = Vec::with_capacity(n);
for node in 1..=n {
if grade[node] == 0 {
sol.push(node);
}
}
let mut head = 0;
while head < sol.len() {
let node = sol[head];
head += 1;
for &son in &g[node] {
grade[son] -= 1;
if grade[son] == 0 {
sol.push(son);
}
}
}
for node in sol {
write!(writer, "{} ", node).unwrap();
}
}