BOJ_14938_서강그라운드_java
2023. 1. 9. 20:40ㆍAlgorithm/BOJ
728x90
https://www.acmicpc.net/problem/14938
14938번: 서강그라운드
예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
/**
백준 14938 서강그라운드
골드 4
*/
public class BOJ_14938_서강그라운드 {
final static int max = 123456789;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 지역의 개수
int m = Integer.parseInt(st.nextToken()); // 수색범위
int r = Integer.parseInt(st.nextToken()); // 길의 개수
int item[] = new int[n+1]; // 각 지역의 아이템 수
int[][] roads = new int[n+1][n+1];
for (int i = 1; i<n+1; i++){
for (int j = 1; j<n+1; j++){
roads[i][j] = max;
}
}
st = new StringTokenizer(br.readLine());
for (int i = 1; i<=n; i++){
item[i] = Integer.parseInt(st.nextToken());
}
for(int i = 0; i<r; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());
roads[a][b] = l;
roads[b][a] = l;
}
//플로이드 와샬
for (int i = 1; i<n+1; i++){ // 경유지
for (int j = 1; j<n+1; j++){ //출발지
for (int k = 1; k<n+1; k++){ // 도착지
if(i == j || j ==k || i == k) continue;
roads[j][k] = Math.min(roads[j][k], roads[j][i] + roads[i][k]);
}
}
}
int ans = 0;
for (int i = 1; i<n+1; i++){ // 출발지 i일때 최대 값 구하기
int tmp = item[i];
for (int j = 1; j<n+1; j++){
if (roads[i][j] <= m){
tmp += item[j];
}
ans = Math.max(ans, tmp);
}
}
System.out.println(ans);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
BOJ_2166_다각형의면적_java (0) | 2023.01.11 |
---|---|
BOJ_12852_1로 만들기 2_java (0) | 2023.01.10 |
BOJ_13172_Σ_java (0) | 2023.01.06 |
BOJ_2448_별 찍기 11_java (0) | 2022.12.28 |
BOJ_1406_에디터_java (0) | 2022.12.27 |