반응형
문제 링크: https://www.acmicpc.net/problem/14938
<문제 풀이> 플로이드-워셜 알고리즘
플로이드-워셜 알고리즘을 사용하여 각 정점에서 다른 모든 정점까지의 최단거리를 구하고, 탐색 범위 내에 존재하는 아이템들을 선택하면 됩니다.
<C++소스코드>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAX_N = 100;
int items[MAX_N + 1];
int d[MAX_N + 1][MAX_N + 1];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n, m, r; cin >> n >> m >> r;
for (int i = 1; i <= n; i++) {
cin >> items[i];
}
memset(d, 0x3f, sizeof(d));
for (int i = 1; i <= n; i++) {
d[i][i] = 0;
}
for (int i = 0; i < r; i++) {
int u, v, w; cin >> u >> v >> w;
d[u][v] = w;
d[v][u] = w;
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
int temp = 0;
for (int j = 1; j <= n; j++) {
if (d[i][j] <= m) {
temp += items[j];
}
}
ans = max(ans, temp);
}
cout << ans;
return 0;
}
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1948번] 임계경로 (1) | 2023.10.04 |
---|---|
[백준 24042번] 횡단보도 (1) | 2023.10.04 |
[백준 6497번] 전력난 (0) | 2023.09.30 |
[백준 1922번] 네트워크 연결 (0) | 2023.09.28 |
[백준 4485] 녹색 옷 입은 애가 젤다지? (0) | 2023.09.27 |