Pagini recente » Cod sursa (job #545468) | Cod sursa (job #335978) | Cod sursa (job #2464047) | Cod sursa (job #2411812) | Cod sursa (job #1426515)
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
int repr_m_disj(unsigned int *M, unsigned int v)
{
if(M[v]!=v)
M[v]=repr_m_disj(M, M[v]);
return M[v];
}
bool comp(pair<pair<unsigned int,unsigned int>,unsigned int> x, pair<pair<unsigned int,unsigned int>,unsigned int> y)
{
return x.second<y.second;
}
int main()
{
vector<pair<pair<unsigned int,unsigned int>,unsigned int> >G;
vector<pair<pair<unsigned int,unsigned int>,unsigned int> >T;
unsigned int *M, nr_v, nr_m;
cin>>nr_v>>nr_m;
for(unsigned int i=0;i<nr_m;i++)
{
unsigned int v1, v2, c;
cin>>v1>>v2>>c;
G.push_back(make_pair(make_pair(v1,v2),c));
}
M=new unsigned int[nr_v];
for(unsigned int i=1;i<=nr_v;i++)
M[i]=i;
sort(G.begin(), G.end(), comp);
for(unsigned int i=0; i<nr_m || T.size()!=nr_v-1 ;i++)
{
unsigned int repr_v1, repr_v2, v1, v2;
v1=G[i].first.first;
v2=G[i].first.second;
repr_v1 = repr_m_disj(M, v1);
repr_v2 = repr_m_disj(M, v2);
if(repr_v1 != repr_v2)
{
T.push_back(G[i]);
M[repr_v1]=M[repr_v2];
}
}
for(unsigned int i=0;i<nr_v-1;i++)
cout<<T[i].first.first<<" "<<T[i].first.second<<" "<<T[i].second<<endl;
return 0;
}