Baekjoon

Baekjoon 1976번 여행 가자

ppwag 2020. 11. 6. 08:33

문제

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

걸린 시간

00 : 21 : 18

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int adj[200][200];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m;
    cin >> n >> m;
    for(int y = 0; y < n; y++){
        for(int x = 0; x < n; x++){
            cin >> adj[y][x];
            if(adj[y][x] == 0) adj[y][x] = INF;
        }
    }
    for(int i = 0; i < n; i++) adj[i][i] = 0;
    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]);
    vector<int> plan(m);
    for(auto& i : plan) cin >> i;
    for(int i = 0; i < m-1; i++){
        if(adj[plan[i]-1][plan[i+1]-1] == INF){
            cout << "NO\n";
            return 0;
        }
    }
    cout << "YES\n";
    return 0;
}

한 도시에서 다른 도시로 이동이 가능한지를 순서대로 살펴보면 된다.

플로이드 와샬 알고리즘으로 한번에 이동 가능 여부를 모두 조사하여 풀이했다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 1774번 우주신과의 교감  (0) 2020.11.08
Baekjoon 2186번 문자판  (0) 2020.11.08
Baekjoon 9177번 단어 섞기  (0) 2020.11.05
Baekjoon 1005번 ACM Craft  (0) 2020.11.05
Baekjoon 2564번 경비원  (0) 2020.11.03

댓글