새소식

코딩테스트/백준_골드

[C++][백준 1922] 네트워크 연결

  • -

[문제]

1922번: 네트워크 연결 (acmicpc.net)

 

1922번: 네트워크 연결

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

www.acmicpc.net

[문제 풀이]

크루스칼 알고리즘의 기본 스탠다드 문제이다. 크루스칼 알고리즘을 알고 있다면 바로 풀 수 있는 문제.

[회고]

특별히 없음.

[코드]

#include <iostream> #include <algorithm> #include <vector> using namespace std; vector<pair<int,pair<int,int> > > graph; int parent[1011]; int n,m; int answer; int find(int x){ if(parent[x] == x){ return x; } return parent[x] = find(parent[x]); } void mergeUnion(int x, int y){ int a = find(x); int b = find(y); if(a == b){ return; } parent[b] = a; return; } bool sameParent(int x, int y){ int a = find(x); int b = find(y); if(a == b){ return true; } return false; } void solve(){ for(int i = 0;i<m;i++){ if(sameParent(graph[i].second.first,graph[i].second.second) == false){ mergeUnion(graph[i].second.first,graph[i].second.second); answer += graph[i].first; } } } int main(){ cin>>n>>m; for(int i = 0;i<m;i++){ int cost,destination,source; cin>>source>>destination>>cost; graph.push_back(make_pair(cost,make_pair(source,destination))); } for(int i = 1;i<=n;i++){ parent[i] = i; } sort(graph.begin(),graph.end()); solve(); cout<<answer<<endl; return 0; }

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.