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 |