Pagini recente » Cod sursa (job #2604204) | Cod sursa (job #2366790) | Cod sursa (job #486017) | Cod sursa (job #3032573) | Cod sursa (job #2763199)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("apm.in");
ofstream g ("apm.out");
int n,m;
int cost;
int par[500005];
struct el
{
int x;
int y;
int cost;
};
el a[500005];
el afis[500005];
int cmp (el A, el B)
{
if(A.cost<B.cost)
return 1;
return 0;
}
int Find(int x)
{
int rad=x;
while(par[rad]!=0)
{
rad=par[rad];
}
while(par[x]!=0)
{
int aux=par[x];
par[x]=rad;
x=aux;
}
return rad;
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; ++i)
{
f>>a[i].x>>a[i].y>>a[i].cost;
}
sort(a+1, a+m+1, cmp);
int puse=0;
int i=1;
while(puse<n)
{
int par1=Find(a[i].x);
int par2=Find(a[i].y);
if(par1!=par2 || par1==0 || par2==0)
{
par[par2]=par1;
cost+=a[i].cost;
afis[puse].x=a[i].x;
afis[puse].y=a[i].y;
++puse;
}
++i;
}
g<<cost<<"\n";
g<<n-1<<"\n";
for(int i=0; i<n-1; ++i)
g<<afis[i].x<<" "<<afis[i].y<<"\n";
return 0;
}