結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-13 22:25:47 |
| 言語 | Perl (5.40.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,879 bytes |
| コンパイル時間 | 110 ms |
| コンパイル使用メモリ | 6,912 KB |
| 実行使用メモリ | 216,696 KB |
| 最終ジャッジ日時 | 2024-07-08 03:41:16 |
| 合計ジャッジ時間 | 15,563 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 11 WA * 12 TLE * 1 -- * 16 |
コンパイルメッセージ
Main.pl syntax OK
ソースコード
# http://yukicoder.me/problems/17
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my $goal = _read_line();
my $money = _read_line();
my $roads = _read_line();
my $map = read_map();
# 前処理終了。
# 解く
my $ans = solve($map, $money, $goal);
say $ans;
sub _read_line {
my $line = <STDIN>;
chomp($line);
return $line;
}
sub read_map {
my $s = [split(/ /, _read_line())];
my $t = [split(/ /, _read_line())];
my $y = [split(/ /, _read_line())];
my $m = [split(/ /, _read_line())];
my $ret = {};
for (my $i = 0 ; $i < @$s ; $i++) {
my $start = $s->[$i];
my $dest = $t->[$i];
$ret->{$start} ||= {};
$ret->{$start}->{$dest} = {
cost => $y->[$i],
dist => $m->[$i],
};
}
return $ret;
}
sub solve {
my ($map, $money, $goal) = @_;
my $cur = [
{
pos => 1,
cost => 0,
dist => 0,
}
];
my $res = [];
while (my $state = pop(@$cur)) {
while (my ($k, $v) = each(%{$map->{ $state->{ pos } }})) {
my $cost = $v->{ cost } + $state->{ cost };
my $dist = $v->{ dist } + $state->{ dist };
next if ($cost > $money);
if ($k == $goal) {
push @$res, {
cost => $cost,
dist => $dist,
}
}
else {
push @$cur, {
pos => $k,
cost => $cost,
dist => $dist,
};
}
}
}
$res = [sort {$a->{dist} <=> $b->{dist}} @$res];
#warn Dumper($res);
return -1 if @$res == 0;
return $res->[0]->{dist};
}