[백준 1197번 C/C++] 최소 스패닝 트리
목차
[백준 1197번 C/C++] 최소 스패닝 트리
해결전략
Union&Find로 이어준다.
코드 - Kruskal Algorithm
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int vertex[100001];
struct Edge
{
int v1;
int v2;
int cost;
Edge(int a, int b, int c){
v1=a, v2=b, cost=c;
}
bool operator<(Edge &b){
return cost<b.cost;
}
};
int Find(int x)
{
if(x==vertex[x]) return x;
else return vertex[x]=Find(vertex[x]);
}
void Union(int a, int b)
{
a=Find(a);
b=Find(b);
if(a!=b) vertex[a]=b;
}
int main()
{
vector<Edge> Ed;
int v, e, res=0;
scanf("%d %d", &v, &e);
for(int i=1; i<=v; i++){
vertex[i]=i;
}
for(int i=1; i<=e; i++){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
Ed.push_back(Edge(a, b, c));
}
sort(Ed.begin(), Ed.end());
for(int i=0; i<e; i++)
{
int fa=Find(Ed[i].v1);
int fb=Find(Ed[i].v2);
if(fa!=fb)
{
res+=Ed[i].cost;
Union(Ed[i].v1, Ed[i].v2);
}
}
printf("%d\n", res);
return 0;
}
for(int i=1; i<=e; i++)
{
int fa=Find(Ed[i].v1);
int fb=Find(Ed[i].v2);
if(fa!=fb)
{
res+=Ed[i].cost;
Union(Ed[i].v1, Ed[i].v2);
}
}
왜 i가 (0, e)면 올바르게 수행되고 [1, e]면 안 되는지 모르겠다..
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 1932번 C/C++] 정수 삼각형 (0) | 2023.06.05 |
---|---|
[백준 25192번 C/C++] 인사성 밝은 곰곰이 (0) | 2023.06.04 |
[백준 11659번 C/C++] 구간 합 구하기 4 (0) | 2023.05.30 |
[백준 2908번 C/C++] 상수 (0) | 2023.05.29 |
[백준 10809번 C/C++] 알파벳 찾기 (0) | 2023.05.26 |
댓글
이 글 공유하기
다른 글
-
[백준 1932번 C/C++] 정수 삼각형
[백준 1932번 C/C++] 정수 삼각형
2023.06.05 -
[백준 25192번 C/C++] 인사성 밝은 곰곰이
[백준 25192번 C/C++] 인사성 밝은 곰곰이
2023.06.04 -
[백준 11659번 C/C++] 구간 합 구하기 4
[백준 11659번 C/C++] 구간 합 구하기 4
2023.05.30 -
[백준 2908번 C/C++] 상수
[백준 2908번 C/C++] 상수
2023.05.29