https://www.acmicpc.net/problem/16398
16398번: 행성 연결
홍익 제국의 중심은 행성 T이다. 제국의 황제 윤석이는 행성 T에서 제국을 효과적으로 통치하기 위해서, N개의 행성 간에 플로우를 설치하려고 한다. 두 행성 간에 플로우를 설치하면 제국의 함
www.acmicpc.net
[난이도] Gold4
[유형] MST
[풀이]
Kruskal 알고리즘
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/16398.cpp
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
struct P{
int a,b,c;
};
int N,uf[1001];
vector<P> vec;
int find(int a){
if(a==uf[a]) return a;
return uf[a] = find(uf[a]);
}
bool merge(int a,int b){
a=find(a);
b=find(b);
if(a==b) return 0;
uf[a]=b;
return 1;
}
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
int v;
scanf("%d",&v);
if(i<j) vec.push_back({i,j,v});
}
}
sort(vec.begin(),vec.end(),[](P& u,P& v)->bool{
return u.c<v.c;
});
for(int i=0;i<N;i++) uf[i]=i;
int cnt=0;
long long ans=0;
for(int i=0;i<vec.size();i++){
auto k = vec[i];
if(merge(k.a,k.b)){
ans+=k.c;
if(++cnt==N-1) break;
}
}
printf("%lld",ans);
}
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold3] 17244 : 아맞다우산 (C++) (0) | 2021.01.17 |
---|---|
[BOJ/백준][Gold4] 16938 : 캠프 준비 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 16120 : PPAP (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 2002 : 추월 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 4803 : 트리 (C++) (0) | 2021.01.17 |