728x90
문제 링크
풀이 아이디어
2차원 배열에 메모리를 할당해서 0과 1을 전부 저장할 필요가 없다.
1이 나올 시에는 두 노드를 가지고 disjoint set을 만드는 것이므로,
바로 union find를 때려 버리면 되는 문제였다.
코드
#include <bits/stdc++.h>
using namespace std;
int n,m;
int node;
int root[201];
int find(int x){
if(root[x]==x) return x;
else return root[x]=find(root[x]);
}
void un(int x, int y){
x = find(x);
y = find(y);
root[x]=y;
}
int main(void){
cin>>n>>m;
for(int i=1; i<=n; i++)
root[i]=i;
for(int i=1; i<=n; i++) {
for (int j = 1; j <= n; j++) {
cin >> node;
if(node) un(i,j);
}
}
int b;
cin>>node;
b=find(node);
for(int i=1; i<m; i++){
cin>>node;
if(b!=find(node)){
cout<<"NO";
return 0;
}
}
cout<<"YES";
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 2056 작업 - 위상정렬과 dp가 함께 쓰이는 문제 (0) | 2021.01.16 |
---|---|
백준 4195 친구 네트워크 - map과 union-find 혼합 문제 (0) | 2021.01.14 |
백준 2533 사회망 서비스 - 가장 쉽고 자세한 트리 dp로 푸는 방법 (0) | 2021.01.14 |
백준 9205 맥주 마시면서 걸어가기 - c++ 플로이드 와샬 풀이 (0) | 2021.01.09 |
백준 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2021.01.06 |