import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
static int N = 1010,n;
static int a[][] = new int[N][N];
static int key[] = new int[N];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
int m = scanner.nextInt();
int k = scanner.nextInt();
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j)a[i][j] = 0;
else a[i][j] = 0x3f3f3f3f;
}
}
for (int i = 1; i <= n; i++) {
int a = scanner.nextInt();
if (a == 1)key[cnt++] = i;
}
while (m-- > 0) {
int x = scanner.nextInt();
int y = scanner.nextInt();
int c = scanner.nextInt();
a[x][y] = Math.min(a[x][y], c);
a[y][x] = a[x][y];
}
floyd();
PriorityQueue<Integer> q = new PriorityQueue<>(105);
for(int i = 1; i <= n ; i ++) {
q.clear();
for(int j = 0; j <cnt;j++) {
if(a[i][key[j]]!=0x3f3f3f3f) q.add(a[i][key[j]]);
}
if(q.size()>=k) outPath(q,k);
else outAll(q);
}
}
private static void outAll(PriorityQueue<Integer> q) {
int res = 0;
while(q.size()>0) {
res+=q.poll();
}
System.out.println(res);
}
private static void outPath(PriorityQueue<Integer> q,int k) {
int res = 0;
for(int i =1 ; i<= k;i++) {
res+=q.poll();
}
System.out.println(res);
}
private static void floyd() {
for(int k = 1; k <= n; k++) {
for(int i = 1; i <= n; i++) {
for(int j = 1;j <= n; j++) {
a[i][j] = Math.min(a[i][j], a[i][k]+a[k][j]);
}
}
}
}
}
CCF317号子任务(JAVA 30 分)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.老大的写作思路 理念。总分总:先说概念的重要性,然后分别解释什么是行动、任务、目标、计划,最后总结。 2.如何...
- 责任人,各店长,周周监督执行 店长执行考勤表,会员礼品登记表,调理师日常规范(我随时查看调理小结,请务必要做好)