Você está na página 1de 1

//rvore Geradora Mnima

#include <bits/stdc++.h>
using namespace std;
struct AR{
int u, v, peso;
};
bool cmp(AR x, AR y){
return x.peso<y.peso;
}
const int N = 1001;
int pai[N], tam[N];
void init(int n){ //Cuidado ao inicializar: pode comear em outros valores!
for(int i=1; i<=n; i++){
pai[i]=i;
tam[i]=1;
}
}
int find(int x){
if(pai[x]==x)return x;
return find(pai[x]);
}
void merge(int x, int y){
int a = find(x);
int b = find(y);
if(tam[a]>tam[b]){
pai[b]=a;
tam[a]+=tam[b];
}
else{
pai[a]=b;
tam[b]+=tam[a];
}
}
int main()
{
int n, m, nteste=1;
ios_base::sync_with_stdio(false);
while(cin>>n>>m){
cout<<"Instancia "<<nteste++<<'\n';
init(n);
vector<AR>aresta;
AR tmp;
for(int i=0; i<m; i++){
cin>>tmp.u>>tmp.v>>tmp.peso;
aresta.push_back(tmp);
}
sort(aresta.begin(), aresta.end(), cmp);
int total=0;
for(int i=0, j=0; i<aresta.size() && j<n-1; i++){
if(find(aresta[i].u) != find(aresta[i].v)){
merge(aresta[i].u, aresta[i].v);
j++;
total+=aresta[i].peso;
}
}
cout<<total<<"\n\n";
}
return 0;
}

Você também pode gostar