문제 풀이 및 개발 공간

[백준] 14938번 서강그라운드 (gold 4 본문

백준공부/java

[백준] 14938번 서강그라운드 (gold 4

gomduri43 2023. 10. 12. 23:53

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[]args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st=new StringTokenizer(br.readLine());
        int n=Integer.valueOf(st.nextToken());
        int m=Integer.valueOf(st.nextToken());
        int r=Integer.valueOf(st.nextToken());

        int[] item=new int[n+1];
        st=new StringTokenizer(br.readLine());
        for(int i=1; i<=n; i++){
            item[i]=Integer.valueOf(st.nextToken());
        }

        int[][] map=new int[n+1][n+1];
        for(int i=1; i<=n; i++){
            Arrays.fill(map[i],100);
        }
        for(int i=0; i<r; i++){
            st=new StringTokenizer(br.readLine());
            int a=Integer.valueOf(st.nextToken());
            int b=Integer.valueOf(st.nextToken());
            int c=Integer.valueOf(st.nextToken());

            map[a][b]=c;
            map[b][a]=c;
        }

        for(int k=1; k<=n; k++){
            for(int i=1; i<=n; i++){
                for(int j=1; j<=n; j++){
                    if(i==j || map[i][k]==100 || map[k][j]==100){
                        continue;
                    }
                    map[i][j]=Math.min(map[i][j], map[i][k]+map[k][j]);
                }
            }
        }
        int answer=0;
        for(int i=1; i<=n; i++){
            int temp=item[i];
            for(int j=1; j<=n; j++){
                if(j!=i && map[i][j]<=m){
                    temp+=item[j];
                }
            }
            answer= Math.max(temp,answer);
        }
        bw.write(answer+"");
        bw.flush();

    }
}