단순한 유니온 파인드 문제, 문제를 잘 읽어보면, 다익스트라도 아니라는 것을 알 수 있다.
단순하게 부모가 같으면 된다. 그리고 n이 10^5이므로, union by rank를 굳이 구현할 필요도 없어서 엄청 쉬운 문제이다.
답
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int parent[100001];
int n,m;
int findParent(int vertex){
if(parent[vertex]!=vertex) parent[vertex]=findParent(parent[vertex]);
return parent[vertex];
}
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;++i){
parent[i]=i;
}
int a,b;
for(int i=0;i<m;++i){
cin>>a>>b;
int parentA=findParent(a);
int parentB=findParent(b);
if(parentA!=parentB){
parent[parentA]=parentB;
}
}
vector<int> table(n);
for(int i=0;i<n;++i){
cin>>table[i];
}
int ans=0;
for(int i=0;i<table.size()-1;++i){
int parentA=findParent(table[i]);
int parentB=findParent(table[i+1]);
if(parentA!=parentB) ++ans;
}
cout<<ans;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 15824 너 봄에는 캡사이신이 맛있단다 C++ (0) | 2024.05.09 |
---|---|
백준 16437 양 구출 작전 C++ (0) | 2024.05.02 |
백준 19941 햄버거 분배 C++ (0) | 2024.04.21 |
백준 17406 배열 돌리기 4 C++ (0) | 2024.04.16 |
백준 22115 창영이와 커피 C++ (0) | 2024.04.16 |