티스토리 뷰

반응형

https://www.acmicpc.net/problem/1922

 

1922번: 네트워크 연결

이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.

www.acmicpc.net

 

  • 필요한 배경지식

최소 신장 트리(Minimum Spanning Tree) : 크루스칼(Kruskal) 알고리즘

 

 

 

  • 문제 해결 방법

단순 MST문제입니다.

유니온 파인드를 활용한 크루스칼 알고리즘을 이용했습니다.

 

 

 

 

  • C++ 전체 코드
#include<bits/stdc++.h> using namespace std; using tpi = tuple<int,int,int>; int N,M; vector<tpi> edge; int par[1001]{}; int find(int k){ ​​​​if(k == par[k]) return k; ​​​​else return par[k] = find(par[k]); } void merge(int a, int b){ ​​​​a = find(a); ​​​​b = find(b); ​​​​par[a] = b; } int main() { ​​​​ios_base::sync_with_stdio(0); ​​​​cin.tie(0); ​​​​cin>>N; ​​​​for(int i=0; i<=N; i++) par[i] = i; ​​​​cin>>M; ​​​​int a,b,c; ​​​​for(int i=0; i<M; i++){ ​​​​​​​​cin>>a>>b>>c; ​​​​​​​​edge.push_back({c,a,b}); ​​​​} ​​​​sort(edge.begin(), edge.end()); ​​​​int ans = 0; ​​​​for(auto e : edge){ ​​​​​​​​int a,b,c; ​​​​​​​​tie(a,b,c) = e; ​​​​​​​​if(find(b) == find(c)) continue; ​​​​​​​​merge(b,c); ​​​​​​​​ans += a; ​​​​} ​​​​cout<<ans; }

 

반응형

'알고리즘 공부 > 문제풀이' 카테고리의 다른 글

백준 11960번 - Max Flow  (0) 2021.05.28
백준 5916번 - 농장 관리  (3) 2021.05.28
백준 10986번 - 나머지 합  (0) 2021.05.25
백준 14267번 - 회사 문화 1  (1) 2021.05.25
백준 17780번 - 새로운 게임  (0) 2021.05.24
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함