Pagini recente » Cod sursa (job #2288209) | Cod sursa (job #1100782) | Cod sursa (job #49497) | Cod sursa (job #2031536) | Cod sursa (job #3267292)
#include <bits/stdc++.h>
using namespace std;
int n , m , x;
struct muchie{
int a , b , cost;
}edge[10005];
bool comparator(muchie a , muchie b){
return a.cost<b.cost;
}
class UandF{
private:
int n;
public:
void init(int sz)
{
n=sz;
card.resize(n+1);
t.resize(n+1);
for(int i=1 ; i<=n ; i++)
{
t[i]=i;
card[i]=1;
}
}
int gasire(int nod)
{
if(t[nod]==nod) return nod;
return t[nod]=gasire(t[nod]);
}
void unire(int nod1 , int nod2)
{
nod1=gasire(nod1);
nod2=gasire(nod2);
if(nod1==nod2) return ;
if(card[nod2]>card[nod1]) swap(nod1 , nod2);
t[nod2]=nod1;
card[nod1]+=card[nod2];
}
}link;
int main()
{
freopen("data.in" , "r", stdin);
freopen("data.out" , "w" ,stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for(int i=0 ; i<m; i++)
{
cin>>edge[i].a>>edge[i].b>>edge[i].cost;
}
sort(edge , edge+m , comparator);
queue<pair<int , int>> sol;
long long costmin=0;
for(int i=0 ; i<m; i++)
{
if(link.gasire(edge[i].a)!=link.gasire(edge[i].b))
{
link.unire(edge[i].a , edge[i].b);
costmin+=edge[i].cost;
sol.push({edge[i].a , edge[i].b});
}
}
while(!sol.empty())
{
cout<<sol.front().first<<" "<<sol.front().second<<"\n";
sol.pop();
}
return 0;
}