编程语言:Java
题目:
题解:水题
结果:AC
import java.io.*;
import java.util.*;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static Scanner sc = new Scanner(new BufferedInputStream(System.in));
static int[][] graph=new int[500][500];
static int[][] values=new int[500][500];
static int[] dis=new int[500];
static int[] value=new int[500];
static boolean[] f=new boolean[500];
static int n,s,d,m;
public static void main(String[] args) throws IOException {
in.nextToken();n= (int) in.nval;
in.nextToken();m= (int) in.nval;
in.nextToken();s= (int) in.nval;
in.nextToken();d= (int) in.nval;
for(int i=0;i<500;i++)
Arrays.fill(graph[i], (int) 1e8);
for(int i=0;i<500;i++)
Arrays.fill(values[i], (int) 1e8);
for(int i=0;i<m;i++){
in.nextToken();int x1= (int) in.nval;
in.nextToken();int x2= (int) in.nval;
in.nextToken();int x3= (int) in.nval;
in.nextToken();int x4= (int) in.nval;
graph[x1][x2]=x3;
values[x1][x2]=x4;
graph[x2][x1]=x3;
values[x2][x1]=x4;
}
dijkstra(s);
out.println(dis[d]+" "+value[d]);
out.flush();
}
private static void dijkstra(int s) {
Arrays.fill(dis, (int) 1e8);
Arrays.fill(value, (int) 1e8);
dis[s]=0;
value[s]=0;
while(true){
int v=-1;
for(int u=0;u<n;u++){
if(!f[u]&&(v==-1||dis[v]>dis[u]))
v=u;
}
if(v==-1)break;
f[v]=true;
for(int u=0;u<n;u++){
if(!f[u]){
if(dis[u]>dis[v]+graph[v][u]){
dis[u]=dis[v]+graph[v][u];
value[u]=value[v]+values[v][u];
}else if(dis[u]==dis[v]+graph[v][u]&&value[u]>value[v]+values[v][u]){
value[u]=value[v]+values[v][u];
}
}
}
}
}
}