#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 |