문제

https://www.acmicpc.net/problem/14938

걸린 시간

풀이

00 : 11 : 59

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m, r;
    cin >> n >> m >> r;
    vector<int> item(n);
    for(auto& i : item) cin >> i;
    vector<vector<int>> adj(n, vector<int>(n, INF));
    for(int i = 0; i < n; i++)
        adj[i][i] = 0;
    int a, b, l;
    for(int i = 0; i < r; i++){
        cin >> a >> b >> l;
        adj[a-1][b-1] = l;
        adj[b-1][a-1] = l;
    }
    for(int k = 0; k < n; k++)
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++)
                adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]);
    int ans = 0;
    for(int i = 0; i < n; i++){
        int tmp = 0;
        for(int j = 0; j < n; j++)
            if(adj[i][j] <= m) tmp += item[j];
        ans = max(ans, tmp);
    }
    cout << ans;
    return 0;
}

각각의 지역에서 다른 지역까지의 거리(수색 범위)는 플로이드-와샬 알고리즘으로 한번에 구할 수 있다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 1504번 특정한 최단 경로  (0) 2020.12.10
Baekjoon 2638번 치즈  (0) 2020.12.09
Baekjoon 17144번 미세먼지 안녕!  (0) 2020.12.08
Baekjoon 15681번 트리와 쿼리  (0) 2020.12.04
Baekjoon 11404번 플로이드  (0) 2020.12.03

댓글