My Profile

김형훈

안녕하세요.
김형훈입니다.

백준 1976 여행 가자

백준 1976 여행 가자

2022년 11월 26일

2022년 11월 26일

cpp, 유니온 파인드

문제

문제

풀이

풀이

방문 가능한 도시끼리 같은 union으로 연결한다.

이후 서로 다른 도시간 이동 가능 여부는 같은 union에 속해 있는지 여부로 판단할 수 있다.

코드

코드

#include <bits/stdc++.h>

using namespace std;

int n, m;
int p[202];

int find(int a)
{
    if (p[a] < 0) return a;
    p[a] = find(p[a]);
    return p[a];
}
void merge(int u, int v)
{
    u = find(u); v = find(v);
    if(u==v) return;
    p[v] = u;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    fill(p + 1, p + n + 1, -1);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
        {
            int a; cin >> a;
            if(a) merge(i, j); // 방문 가능한 두 도시는 같은 union으로 연결
        }
    int a = 0;
    for (int i = 0; i < m; ++i)
    {
        int b; cin >> b;
        if (a == 0)
        {
            // 초기값 예외
            a = b;
            continue;
        }
        if (find(a) != find(b))
        {
            // 서로 연결되어있지 않으면 방문 불가
            cout << "NO";
            return 0;
        }
        a = b;
    }
    cout << "YES";
}

결과

결과

Copyright © 2024 Hyunghoon Kim