結果
問題 | No.2301 Namorientation |
ユーザー |
|
提出日時 | 2023-05-12 23:35:52 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 236 ms / 3,000 ms |
コード長 | 2,713 bytes |
コンパイル時間 | 15,464 ms |
コンパイル使用メモリ | 377,900 KB |
実行使用メモリ | 61,952 KB |
最終ジャッジ日時 | 2024-11-28 20:25:33 |
合計ジャッジ時間 | 25,338 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
use std::collections::*;use std::io::{Write, BufWriter};// https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8macro_rules! input {($($r:tt)*) => {let stdin = std::io::stdin();let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock()));let mut next = move || -> String{bytes.by_ref().map(|r|r.unwrap() as char).skip_while(|c|c.is_whitespace()).take_while(|c|!c.is_whitespace()).collect()};input_inner!{next, $($r)*}};}macro_rules! input_inner {($next:expr) => {};($next:expr,) => {};($next:expr, $var:ident : $t:tt $($r:tt)*) => {let $var = read_value!($next, $t);input_inner!{$next $($r)*}};}macro_rules! read_value {($next:expr, ( $($t:tt),* )) => { ($(read_value!($next, $t)),*) };($next:expr, [ $t:tt ; $len:expr ]) => {(0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()};($next:expr, usize1) => (read_value!($next, usize) - 1);($next:expr, $t:ty) => ($next().parse::<$t>().expect("Parse error"));}fn main() {let out = std::io::stdout();let mut out = BufWriter::new(out.lock());macro_rules! puts {($($format:tt)*) => (let _ = write!(out,$($format)*););}input! {n: usize,ab: [(usize1, usize1); n],}let mut g = vec![BTreeSet::new(); n];let mut act = vec![true; n];for i in 0..n {let (a, b) = ab[i];g[a].insert((b, i));g[b].insert((a, n + i));}let mut que = vec![];for i in 0..n {if g[i].len() == 1 {que.push(i);}}let mut ori = vec![""; n];while let Some(v) = que.pop() {act[v] = false;let &(to, eidx) = g[v].iter().next().unwrap();ori[eidx % n] = if eidx >= n { "<-" } else { "->" };g[to].remove(&(v, (eidx + n) % (2 * n)));if g[to].len() == 1 {que.push(to);}}// One cycle remains.let mut st = 0;for i in 0..n {if act[i] {st = i;break;}}let &(to, eidx) = g[st].iter().next().unwrap();g[st].remove(&(to, eidx));g[to].remove(&(st, (eidx + n) % (2 * n)));ori[eidx % n] = if eidx >= n { "<-" } else { "->" };que.push(to);while let Some(v) = que.pop() {act[v] = false;let &(to, eidx) = g[v].iter().next().unwrap();ori[eidx % n] = if eidx >= n { "<-" } else { "->" };g[to].remove(&(v, (eidx + n) % (2 * n)));if g[to].len() == 1 {que.push(to);}}for i in 0..n {puts!("{}\n", ori[i]);}}