Pagini recente » Borderou de evaluare (job #729761) | Monitorul de evaluare | Borderou de evaluare (job #2130526) | Monitorul de evaluare | Cod sursa (job #3340238)
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(())
}