結果
| 問題 |
No.160 最短経路のうち辞書順最小
|
| コンテスト | |
| ユーザー |
threepipes_s
|
| 提出日時 | 2015-03-02 01:34:07 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,863 bytes |
| コンパイル時間 | 2,562 ms |
| コンパイル使用メモリ | 84,484 KB |
| 実行使用メモリ | 69,380 KB |
| 最終ジャッジ日時 | 2024-06-24 00:58:17 |
| 合計ジャッジ時間 | 15,609 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 20 WA * 5 TLE * 1 |
ソースコード
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
public class Main {
public static int[][] cost;
public static int n;
public static int inf;
public static boolean[][] check;
public static boolean[] checked;
public static int[][] start;
public static void main(String[] args) throws NumberFormatException, IOException{
ContestScanner in = new ContestScanner();
n = in.nextInt();
int m = in.nextInt();
int s = in.nextInt();
int g = in.nextInt();
// Node[] node = new Node[n];
inf = 100000000;
check = new boolean[n][n];
cost = new int[n][n];
start = new int[n][n];
checked = new boolean[n];
// for(int i=0; i<n; i++){
// node[i] = new Node(i);
// }
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(i != j){
cost[i][j] = inf;
start[i][j] = inf;
}
}
}
for(int i=0; i<m; i++){
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
// node[a].createEdge(node[b]);
// node[b].createEdge(node[a]);
cost[a][b] = c;
cost[b][a] = c;
check[a][b] = true;
check[b][a] = true;
start[a][b] = c;
start[b][a] = c;
}
// Queue<Node> qu = new PriorityQueue<Node>();
// node[s].sum = 0;
// checked[s] = true;
// qu.add(node[s]);
// while(!qu.isEmpty()){
// Node nd = qu.poll();
//
// }
for(int l=0; l<2; l++)
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int k=0; k<n; k++){
if(cost[i][j] > cost[i][k]+cost[k][j]){
cost[i][j] = cost[i][k]+cost[k][j];
}
}
}
}
// for(int i=0; i<n; i++){
// for(int j=0; j<n; j++){
// System.out.print(cost[i][j]+" ");
// }
// System.out.println();
// }
System.out.print(s+" ");
// dfs(s, s, g);
int now = s;
checked[now] = true;
while(g != now){
int min = inf;
int minid = 0;
for(int i=0; i<n; i++){
if(i == now) continue;
if(!check[i][now] || checked[i]) continue;
if(min > start[now][i]+cost[i][g]){
minid = i;
min = start[now][i]+cost[i][g];
}
}
System.out.print(minid+" ");
now = minid;
checked[now] = true;
}
System.out.println();
// for(int i=0; i<n; i++){
// for(int j=0; j<n; j++){
// System.out.print(cost[i][j]+" ");
// }
// System.out.println();
// }
}
public static void dfs(int s, int now, int g){
if(now == g){
return;
}
int min = inf;
int minid = 0;
for(int i=0; i<n; i++){
if(i == now) continue;
if(!check[i][now]) continue;
if(min > start[now][i]+cost[i][g]){
minid = i;
min = start[now][i]+cost[i][g];
}
}
System.out.print(minid+" ");
dfs(s, minid, g);
}
}
class MyComp implements Comparator<int[]>{
public int compare(int[] a, int[] b) {
return a[0] - b[0];
}
}
class Reverse implements Comparator<Integer>{
public int compare(Integer arg0, Integer arg1) {
return arg1 - arg0;
}
}
class Node implements Comparable<Node>{
int id;
List<Node> edge = new ArrayList<Node>();
// List<Integer> cost = new ArrayList<Integer>();
int sum;
public Node(int id){
this.id = id;
sum = 100000000;
}
public void createEdge(Node node){
edge.add(node);
// cost.add(c);
}
@Override
public int compareTo(Node o) {
// TODO 自動生成されたメソッド・スタブ
return sum - o.sum;
}
}
class ContestWriter{
private PrintWriter out;
public ContestWriter(String filename) throws IOException{
out = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
}
public ContestWriter() throws IOException{
out = new PrintWriter(System.out);
}
public void println(String str){
out.println(str);
}
public void print(String str){
out.print(str);
}
public void close(){
out.close();
}
}
class ContestScanner{
private BufferedReader reader;
private String[] line;
private int idx;
public ContestScanner() throws FileNotFoundException{
reader = new BufferedReader(new InputStreamReader(System.in));
}
public ContestScanner(String filename) throws FileNotFoundException{
reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
}
public String nextToken() throws IOException{
if(line == null || line.length <= idx){
line = reader.readLine().trim().split(" ");
idx = 0;
}
return line[idx++];
}
public long nextLong() throws IOException, NumberFormatException{
return Long.parseLong(nextToken());
}
public int nextInt() throws NumberFormatException, IOException{
return (int)nextLong();
}
public double nextDouble() throws NumberFormatException, IOException{
return Double.parseDouble(nextToken());
}
}
threepipes_s