반응형
갈 수 있는 경로라면, 같은 집합으로 묶어주었습니다.
이동 경로의 모든 조상이 같다면, 가능합니다.
#include <iostream>
#include <map>
using namespace std;
map<int, int> set;
int n, m, a;
int graph[200][200];
int findParent(int x) {
auto f = set.find(x);
if (f == set.end()) return x;
else return f->second = findParent(f->second);
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a);
if(a == 1) {
int ai = findParent(i + 1);
int aj = findParent(j + 1);
if(ai != aj)
set.insert({ ai, aj });
}
}
}
int p = -1, ans = 1;
while (scanf("%d", &a) == 1) {
if (p == -1) p = findParent(a);
if (findParent(a) != p) ans = 0;
}
printf("%s\n", ans ? "YES" : "NO");
}
반응형
'Algorithm' 카테고리의 다른 글
백준 2607 : 비슷한 단어 (0) | 2021.11.14 |
---|---|
백준 4195 : 친구 네트워크 (0) | 2021.11.14 |
백준 1717 : 집합의 표현 (0) | 2021.11.14 |
프로그래머스 : 호텔 방 배정 (0) | 2021.11.14 |
프로그래머스 : 셔틀버스 (0) | 2021.11.14 |