提出 #65400848
ソースコード 拡げる
#![allow(unused)]
fn main() {
let inp = readv::<usize>();
let (n, m, l) = (inp[0], inp[1], inp[2] as i64);
let inf = 10i64.pow(18);
let mut adj = vec![vec![inf; n]; n];
for u in 0..n {
adj[u][u] = 0;
}
for _ in 0..m {
let edge = readv::<usize>();
let (u, v, w) = (edge[0] - 1, edge[1] - 1, edge[2] as i64);
adj[u][v] = w;
adj[v][u] = w;
}
let dis = floyd_warshall(&adj, inf);
let mut shortcuts = vec![vec![inf; n]; n];
for u in 0..n {
shortcuts[u][u] = 0;
for v in 0..n {
if dis[u][v] <= l {
shortcuts[u][v] = 1;
shortcuts[v][u] = 1;
}
}
}
let jumps = floyd_warshall(&shortcuts, inf);
let q = read::<usize>();
let mut ans = vec![];
for _ in 0..q {
let ask = readv::<usize>();
let (u, v) = (ask[0] - 1, ask[1] - 1);
if jumps[u][v] == inf {
ans.push(-1);
} else {
ans.push(jumps[u][v] - 1);
}
}
println!("{}", join(&ans, "\n"));
}
fn floyd_warshall(adj: &Vec<Vec<i64>>, inf: i64) -> Vec<Vec<i64>> {
// dp[k][u][v] = minimum distance from u to v using vertices 0..=k as intermediate
// dp[-1][u][v] = adj[u][v]
// dp[k][u][v] = min(dp[k - 1][u][v], dp[k - 1][u][k] + dp[k - 1][k][v]);
// adj[u][u] is usally 0. Remember to check it.
let n = adj.len();
let mut dp = adj.clone();
for k in 0..n {
for u in 0..n {
for v in 0..n {
if dp[u][k] != inf && dp[k][v] != inf {
dp[u][v] = dp[u][v].min(dp[u][k] + dp[k][v]);
}
}
}
}
dp
}
fn read<T: std::str::FromStr>() -> T {
let mut s = String::new();
std::io::stdin().read_line(&mut s);
s.trim().parse().ok().unwrap()
}
fn readv<T: std::str::FromStr>() -> Vec<T> {
read::<String>()
.split_ascii_whitespace()
.map(|t| t.parse().ok().unwrap())
.collect()
}
fn reads() -> Vec<char> {
read::<String>().chars().collect()
}
fn mapv<T, S, F: Fn(&T) -> S>(arr: &Vec<T>, f: F) -> Vec<S> {
arr.iter().map(f).collect()
}
fn join<T: ToString>(arr: &[T], sep: &str) -> String {
arr.iter()
.map(|x| x.to_string())
.collect::<Vec<String>>()
.join(sep)
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Travel by Car |
| ユーザ | amoshuangyc |
| 言語 | Rust (rustc 1.70.0) |
| 得点 | 500 |
| コード長 | 2439 Byte |
| 結果 | AC |
| 実行時間 | 105 ms |
| メモリ | 10512 KiB |
ジャッジ結果
| セット名 | Sample | All | after_contest (0) | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 500 / 500 | 0 / 0 | ||||||
| 結果 |
|
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00-sample-00, 00-sample-01, 00-sample-02 |
| All | 00-sample-00, 00-sample-01, 00-sample-02, 01-handmade-03, 01-handmade-04, 01-handmade-05, 01-handmade-06, 01-handmade-07, 02-random-08, 02-random-09, 02-random-10, 02-random-11, 02-random-12, 02-random-13, 02-random-14, 02-random-15, 02-random-16, 02-random-17, 02-random-18, 02-random-19, 02-random-20, 02-random-21, 02-random-22, 02-random-23, 02-random-24, 02-random-25, 02-random-26, 02-random-27, 02-random-28, 02-random-29, 02-random-30, 02-random-31, 02-random-32, 02-random-33, 02-random-34, 02-random-35, 02-random-36, 02-random-37, 02-random-38, 02-random-39, 02-random-40, 02-random-41, 02-random-42, 02-random-43, 02-random-44, 02-random-45, 02-random-46, 02-random-47, 02-random-48, 02-random-49 |
| after_contest (0) | after_contest_00 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00-sample-00 | AC | 1 ms | 1892 KiB |
| 00-sample-01 | AC | 1 ms | 1928 KiB |
| 00-sample-02 | AC | 1 ms | 1928 KiB |
| 01-handmade-03 | AC | 57 ms | 10428 KiB |
| 01-handmade-04 | AC | 104 ms | 10348 KiB |
| 01-handmade-05 | AC | 105 ms | 10424 KiB |
| 01-handmade-06 | AC | 79 ms | 10464 KiB |
| 01-handmade-07 | AC | 77 ms | 10376 KiB |
| 02-random-08 | AC | 1 ms | 1992 KiB |
| 02-random-09 | AC | 3 ms | 2288 KiB |
| 02-random-10 | AC | 64 ms | 10440 KiB |
| 02-random-11 | AC | 2 ms | 2348 KiB |
| 02-random-12 | AC | 6 ms | 2912 KiB |
| 02-random-13 | AC | 8 ms | 3144 KiB |
| 02-random-14 | AC | 67 ms | 8136 KiB |
| 02-random-15 | AC | 59 ms | 10484 KiB |
| 02-random-16 | AC | 25 ms | 5248 KiB |
| 02-random-17 | AC | 39 ms | 7312 KiB |
| 02-random-18 | AC | 2 ms | 2356 KiB |
| 02-random-19 | AC | 1 ms | 1944 KiB |
| 02-random-20 | AC | 59 ms | 10400 KiB |
| 02-random-21 | AC | 12 ms | 3836 KiB |
| 02-random-22 | AC | 1 ms | 1924 KiB |
| 02-random-23 | AC | 22 ms | 4488 KiB |
| 02-random-24 | AC | 80 ms | 8836 KiB |
| 02-random-25 | AC | 63 ms | 10376 KiB |
| 02-random-26 | AC | 1 ms | 1940 KiB |
| 02-random-27 | AC | 25 ms | 6000 KiB |
| 02-random-28 | AC | 38 ms | 5948 KiB |
| 02-random-29 | AC | 30 ms | 5244 KiB |
| 02-random-30 | AC | 60 ms | 10364 KiB |
| 02-random-31 | AC | 2 ms | 2388 KiB |
| 02-random-32 | AC | 19 ms | 4856 KiB |
| 02-random-33 | AC | 29 ms | 5292 KiB |
| 02-random-34 | AC | 21 ms | 4448 KiB |
| 02-random-35 | AC | 61 ms | 10512 KiB |
| 02-random-36 | AC | 16 ms | 4356 KiB |
| 02-random-37 | AC | 27 ms | 5300 KiB |
| 02-random-38 | AC | 0 ms | 2096 KiB |
| 02-random-39 | AC | 1 ms | 2044 KiB |
| 02-random-40 | AC | 63 ms | 10200 KiB |
| 02-random-41 | AC | 75 ms | 10316 KiB |
| 02-random-42 | AC | 7 ms | 3532 KiB |
| 02-random-43 | AC | 76 ms | 8800 KiB |
| 02-random-44 | AC | 1 ms | 1960 KiB |
| 02-random-45 | AC | 60 ms | 10428 KiB |
| 02-random-46 | AC | 3 ms | 2520 KiB |
| 02-random-47 | AC | 47 ms | 8428 KiB |
| 02-random-48 | AC | 1 ms | 1920 KiB |
| 02-random-49 | AC | 5 ms | 2616 KiB |
| after_contest_00 | AC | 104 ms | 10392 KiB |