package AdvancedLevelPractice;
import java.util.Scanner;
public class pat1003 {
public static final int max = 0Xffff;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int C1 = scanner.nextInt();
int C2 = scanner.nextInt();
int[] rescueTeams = new int[N];
int[][] distances = new int[N][N];
for(int i = 0; i < N; i++){
rescueTeams[i] = scanner.nextInt();
for(int j = 0; j < N; j++){
distances[i][j] = max;
}
distances[i][i] = 0;
}
for(int i = 0; i < M; i++){
int cc1 = scanner.nextInt();
int cc2 = scanner.nextInt();
int d = scanner.nextInt();
distances[cc1][cc2] = distances[cc2][cc1] = d;
}
int[] results = getShortestPath(C1, C2, N, distances, rescueTeams);
System.out.print(results[0]+" "+results[1]);
scanner.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private static int[] getShortestPath(int S, int D, int N, int[][] distances, int[] rescueTeams) {
// TODO Auto-generated method stub
int[] length = new int[N];
int[] flag = new int[N];
int[] teamNum = new int[N];
int[] count = new int[N];
for(int i = 0; i < N; i++){
length[i] = distances[S][i];
flag[i] = 1;
count[i] = 1;
if(distances[S][i] != max ){
if(distances[S][i] == 0){
teamNum[i] = rescueTeams[i];
}
else {
teamNum[i] = rescueTeams[i] + rescueTeams[S];
}
}
else{
teamNum[i] = 0;
}
}
flag[S] = 0;
//teamNum[S] = rescueTeams[S];
int minDistance, index = S;
for(int i = 0; i < N - 1; i++){
minDistance = max;
for(int j = 0; j < N; j++){
if(flag[j] != 0 && minDistance > length[j]){
minDistance = length[j];
index = j;
}
}
//teamNum[index] = teamNum[S] + rescueTeams[index];
flag[index] = 0;
for(int k = 0; k < N; k++){
int tmp = length[index] + distances[index][k];
if(flag[k] != 0 && length[k] >= tmp){
int num = teamNum[index] + rescueTeams[k];
if(length[k] > tmp){
count[k] = count[index];
length[k] = tmp;
teamNum[k] = num;
}
else {
count[k] = count[k] + count[index];
if (teamNum[k] < num) {
teamNum[k] = num;
}
}
}
}
}
/*
for(int i = 0; i < N; i++){
System.out.println(length[i]+"\t"+teamNum[i]+"\t"+count[i]);
}
*/
int[] results = new int[2];
results[0] = count[D];
results[1] = teamNum[D];
return results;
}
}
pat1003
最新推荐文章于 2022-09-06 12:42:28 发布