AOJ 0200 Traveling Alone: One-way Ticket of Youthを解く

Traveling Alone: One-way Ticket of Youth | Aizu Online Judge


はいはいワーシャルフロイドワーシャルフロイド(覚えたばっかりのアルゴリズムを言いたくなる症候群)

→WA

は?

あ ループがなんかおかしい

→AC


んんwwwwwww

経由地 出発地 目的地 の順のループですな

import java.util.*;
public class Main {
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    while(true) {
      int n = stdIn.nextInt();
      int m = stdIn.nextInt();
      
      if(n == 0 && m == 0) {
        break;
      }
    
      int[][] cost = new int[m+1][m+1];
      int[][] time = new int[m+1][m+1];
    
      for(int i = 0; i < m+1; i++) {
        for(int j = 0; j < m+1; j++) {
          cost[i][j] = 1000000000;
          time[i][j] = 1000000000;
          if(i == j) {
            cost[i][j] = 0;
            time[i][j] = 0;
          }
        }
      }
    
      for(int i = 0; i < n; i++) {
        int a = stdIn.nextInt();
        int b = stdIn.nextInt();
        int costA = stdIn.nextInt();
        int timeA = stdIn.nextInt();
      
        cost[a][b] = costA;
        cost[b][a] = costA;
      
        time[a][b] = timeA;
        time[b][a] = timeA;
      }
    
      for(int k = 0; k < m+1; k++) {
        for(int i = 0; i < m+1; i++) {
          for(int j = 0; j < m+1; j++) {
            cost[i][j] = Math.min(cost[i][j], cost[i][k]+cost[k][j]);
            time[i][j] = Math.min(time[i][j], time[i][k] + time[k][j]);
          }
        }
      }
    
      int k = stdIn.nextInt();
    
      for(int i = 0; i < k; i++) {
        int p = stdIn.nextInt();
        int q = stdIn.nextInt();
        int r = stdIn.nextInt();
      
        if(r == 0) {
          System.out.println(cost[p][q]);
        }
        else {
          System.out.println(time[p][q]);
        }
      
      }
    
    }
    
  }
}