1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define INF 0x3f3f3f3f 5 int map[1000][1000],map2[1000][1000]; 6 int n; 7 void floyed() 8 { 9 int i,j,k; 10 for(k=0; k<n; k++) 11 { 12 for(i=0; i<n; i++) 13 { 14 for(j=0; j<n; j++) 15 { 16 if(map[i][j]>map[i][k]+map[k][j]) 17 { 18 map[i][j]=map[i][k]+map[k][j]; 19 map2[i][j]=map2[i][k]+map2[k][j]; 20 } 21 else if(map[i][j]==map[i][k]+map[k][j]) 22 { 23 if(map2[i][j]>map2[i][k]+map2[k][j]) 24 map2[i][j]=map2[i][k]+map2[k][j]; 25 26 } 27 } 28 } 29 } 30 } 31 int main() 32 { 33 int T; 34 scanf("%d",&T); 35 while(T--) 36 { 37 int m,begin,end,a,b,c,d; 38 scanf("%d %d",&n,&m); 39 scanf("%d %d",&begin,&end); 40 memset(map,INF,sizeof(map)); 41 memset(map2,0,sizeof(map2)); 42 while(m--) 43 { 44 scanf("%d %d %d %d",&a,&b,&c,&d); 45 map[a][b]=map[b][a]=c; 46 map2[a][b]=map2[b][a]=d; 47 } 48 floyed(n); 49 printf("%d %d ",map[begin][end],map2[begin][end]); 50 } 51 return 0; 52 }