■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 件のコメント:
コメントを投稿