알고리즘/백준
백준 1976 여행가자 - 2차원 array 형태로 데이터 주어질 때 효과적인 union find
hqjang
2021. 1. 14. 22:14
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;
}