結果
| 問題 | No.3326 岩井星人の帰星 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-04 23:04:22 |
| 言語 | Rust (1.97.1 + proconio + num + itertools) |
| 結果 |
AC
|
| 実行時間 | 47 ms / 2,000 ms |
| + 700µs | |
| コード長 | 1,851 bytes |
| 記録 | |
| コンパイル時間 | 3,924 ms |
| コンパイル使用メモリ | 198,684 KB |
| 実行使用メモリ | 34,792 KB |
| 最終ジャッジ日時 | 2026-09-04 23:08:02 |
| 合計ジャッジ時間 | 6,411 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 59 |
ソースコード
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
m: usize,
uv: [(Usize1, Usize1); m],
l: usize,
jk: [(Usize1, usize); l],
}
let mut graph_1 = vec![vec![]; n];
for &(u, v) in &uv {
graph_1[u].push(v);
graph_1[v].push(u);
}
let watched = bfs_1(&graph_1, &jk);
if watched[0] {
println!("No");
return;
}
let mut graph_2 = vec![vec![]; n];
for &(u, v) in &uv {
if !watched[u] && !watched[v] {
graph_2[u].push(v);
graph_2[v].push(u);
}
}
let dist = bfs_2(&graph_2, 0);
if dist[n - 1] == 1 << 30 {
println!("No");
} else {
println!("Yes");
println!("{}", dist[n - 1]);
}
}
pub fn bfs_1(graph: &Vec<Vec<usize>>, jk: &[(usize, usize)]) -> Vec<bool> {
let n = graph.len();
let mut watched = vec![false; n];
let mut que = std::collections::VecDeque::new();
for &(j, k) in jk {
watched[j] = true;
que.push_back((j, k));
}
while let Some((u, k)) = que.pop_front() {
if k == 0 {
continue;
}
for &v in &graph[u] {
if watched[v] {
continue;
}
watched[v] = true;
que.push_back((v, k - 1));
}
}
watched
}
pub fn bfs_2(graph: &Vec<Vec<usize>>, s: usize) -> Vec<usize> {
let inf = (1 << 30) as usize;
let n = graph.len();
let mut dist = vec![inf; n];
let mut que = std::collections::VecDeque::new();
dist[s] = 0;
que.push_back(s);
while let Some(u) = que.pop_front() {
for &v in &graph[u] {
if dist[v] != inf {
continue;
}
dist[v] = dist[u] + 1;
que.push_back(v);
}
}
dist
}