結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
mastersatoshi
|
| 提出日時 | 2015-07-24 02:09:11 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,097 bytes |
| コンパイル時間 | 2,360 ms |
| コンパイル使用メモリ | 79,148 KB |
| 実行使用メモリ | 54,948 KB |
| 最終ジャッジ日時 | 2024-07-08 04:10:00 |
| 合計ジャッジ時間 | 7,574 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 15 WA * 25 |
ソースコード
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int C = Integer.parseInt(br.readLine());
int V = Integer.parseInt(br.readLine());
int[] S = convert(br.readLine().split(" "));
int[] T = convert(br.readLine().split(" "));
int[] Y = convert(br.readLine().split(" "));
int[] M = convert(br.readLine().split(" "));
int[][] cost = new int[N + 1][N + 1];
int[][] time = new int[N + 1][N + 1];
//経路形成(双方向)
for (int i = 0; i < V; i++) {
cost[S[i]][T[i]] = Y[i];
cost[T[i]][S[i]] = Y[i];
time[S[i]][T[i]] = M[i];
time[T[i]][S[i]] = M[i];
}
ArrayList<int[]> next = new ArrayList();
for (int i = 2; i <= N; i++) {
if (cost[1][i] != 0) {
int[] tmp = new int[4];
tmp[0] = 1;
tmp[1] = i;
tmp[2] = cost[1][i];
tmp[3] = time[1][i];
next.add(tmp);
}
}
next.sort(new CustomComparator());
int[] minCost = new int[N + 1];
int[] minTime = new int[N + 1];
Arrays.fill(minCost, Integer.MAX_VALUE);
Arrays.fill(minTime, Integer.MAX_VALUE);
minCost[1] = 0;
minTime[1] = 0;
while (!next.isEmpty()) {
int[] tmp = next.get(0);
next.remove(0);
if (minCost[tmp[0]] + tmp[2] <= C
&& minTime[tmp[1]] > minTime[tmp[0]] + tmp[3]) {
minCost[tmp[1]] = minCost[tmp[0]] + tmp[2];
minTime[tmp[1]] = minTime[tmp[0]] + tmp[3];
for (int i = 1; i <= N; i++) {
if (cost[tmp[1]][i] != 0) {
int[] tmp2 = new int[4];
tmp2[0] = tmp[1];
tmp2[1] = i;
tmp2[2] = cost[tmp[1]][i];
tmp2[3] = time[tmp[1]][i];
next.add(tmp2);
}
}
next.sort(new CustomComparator());
}
}
if (minCost[N] <= C) {
System.out.println(minTime[N]);
} else {
System.out.println(-1);
}
}
private static int[] convert(String[] source) {
int[] dest = new int[source.length];
for (int i = 0; i < source.length; i++) {
dest[i] = Integer.parseInt(source[i]);
}
return dest;
}
static class CustomComparator implements Comparator<int[]> {
public int compare(int[] a, int[] b) {
int no1 = a[2];
int no2 = b[2];
if (no1 > no2) {
return 1;
} else if (no1 == no2) {
return 0;
} else {
return -1;
}
}
}
}
mastersatoshi