#include <iostream>
#include <vector>
#include <queue>
 
int graph[201][201] = {};
bool visit[201] = {};
 
int main()
{
    int N = 0;
    int M = 0;
    std::cin >> N >> M;
 
    std::vector<int> visitList = {};
 
    for (int i = 1; i <= N; ++i)
    {
        for (int j = 1; j <= N; ++j)
        {
            std::cin >> graph[i][j];
        }
    }
 
    for (int i = 1; i <= M; ++i)
    {
        int iNumber = 0;
        std::cin >> iNumber;
        visitList.push_back(iNumber);
    }
 
    std::queue<int> que = {};
 
    que.push(visitList[0]);
 
    while (!que.empty())
    {
        int iNow = que.front();
        que.pop();
 
        visit[iNow] = true;
 
        for (int i = 1; i <= N; ++i)
        {
            if (graph[iNow][i] && !visit[i])
                que.push(i);
        }
    }
 
    for (int i = 0; i < visitList.size(); i++)
    {
        if (!visit[visitList[i]])
        {
            std::cout << "NO";
            return 0;
        }
    }
 
    std::cout << "YES";
    return 0;
}

BFS, 솔직히 문제가 뭔가 싶었긴했는데... 그냥  BFS...

뭐 Union_Find로도 가능하다고 하는데... 잘 모르겠다 그냥 BFS로 풀었다.

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 9655 돌 게임  (0) 2022.06.09
[C++] 백준 1927 최소 힙  (0) 2022.06.08
[C++] 백준 2467 용액  (0) 2022.06.06
[C++] 백준 1446 지름길  (0) 2022.06.04
[C++] 백준 15989 1, 2, 3 더하기  (0) 2022.06.03

+ Recent posts