(C++) 백준 14621 나만 안되는 연애
문제 및 풀이
https://www.acmicpc.net/problem/14621
최소 스패닝 트리
- 임의의 노드에서부터 시작해서 비용이 적은순으로 정렬된 우선순위 큐를 통해 dfs로 탐색한다.
- 싸이클을 만들지 않기 위해 이미 탐색한 노드는 탐색하지 않는다.
- 문제 조건에 의해 같은 성별의 노드는 탐색하지 않는다는 조건을 추가한다.
코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M;
char node[1005];
bool isvisited[1005];
vector<pair<int,int>> edge[1005];
int a,b,c;
int main(){
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin>>N>>M;
for(int k=1; k<=N; k++) cin>>node[k];
for(int i=0; i<M; i++) {
cin>>a>>b>>c;
edge[a].emplace_back(c,b);
edge[b].emplace_back(c,a);
}
priority_queue<pair<int, int>> pq;
int ans=0;
pq.push({0,1});
while(!pq.empty()){
int now = pq.top().second;
int cost = pq.top().first*(-1);
pq.pop();
if(isvisited[now]) continue;
isvisited[now]=true;
ans+=cost;
for(int i=0; i<edge[now].size(); i++){
int next = edge[now][i].second;
int nextCost = edge[now][i].first;
if(node[next]==node[now]) continue;
pq.push({-nextCost, next});
}
}
for(int i=1; i<=N; i++) if(!isvisited[i]) {cout<<"-1"; return 0 ;}
cout<<ans;
}
Author And Source
이 문제에 관하여((C++) 백준 14621 나만 안되는 연애), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minayeah/C-백준-14621-나만-안되는-연애저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)