■0200 Traveling Alone: One-way Ticket of Youth
Warshall-Floyd.O(n3)でn=300なので,多分間に合うだろうという魂胆.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class Main{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
int[][] cost, time;
int n, m, k;
void run(){
for(;;){
n=sc.nextInt();
m=sc.nextInt();
if((n|m)==0){
break;
}
cost=new int[m][m];
time=new int[m][m];
for(int j=0; j<m; j++){
fill(cost[j], INF);
fill(time[j], INF);
}
for(int i=0; i<n; i++){
int a=sc.nextInt()-1;
int b=sc.nextInt()-1;
int c=sc.nextInt();
int t=sc.nextInt();
cost[a][b]=cost[b][a]=c;
time[a][b]=time[b][a]=t;
}
for(int k=0; k<m; k++){
for(int i=0; i<m; i++){
for(int j=0; j<m; j++){
cost[i][j]=min(cost[i][j], cost[i][k]+cost[k][j]);
time[i][j]=min(time[i][j], time[i][k]+time[k][j]);
}
}
}
k=sc.nextInt();
for(int i=0; i<k; i++){
int p=sc.nextInt()-1;
int q=sc.nextInt()-1;
int r=sc.nextInt();
if(r==0){
println(cost[p][q]+"");
}else{
println(time[p][q]+"");
}
}
}
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
void print(String s){
System.out.print(s);
}
void println(String s){
System.out.println(s);
}
public static void main(String[] args){
// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
new Main().run();
}
}
0 件のコメント:
コメントを投稿