Pagini recente » Cod sursa (job #373224) | Cod sursa (job #1582940) | Cod sursa (job #263419) | Cod sursa (job #2015697) | Cod sursa (job #1258698)
#include<cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
struct rct
{
int a,b,cost;
}act;
int n,m,i,j,x,y,z,p,gr[200001],nod,cost,nr;
vector<rct> muchii,rasp;
queue<int> coada;
int cmp(rct A, rct B)
{
return A.cost<B.cost;
}
int grupa(int i)
{
if(gr[i]==i)
return i;
else
gr[i]=grupa(gr[i]);
return gr[i];
}
int reuniune (int i, int j)
{
gr[grupa(i)]=grupa(j);
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=m; i++)
{
scanf("%d%d%d", &act.a, &act.b, &act.cost);
muchii.push_back(act);
}
sort(muchii.begin(),muchii.end(),cmp);
for(i=1; i<=n; i++)
gr[i]=i;
for(i=0; i<muchii.size(); i++)
{
if(grupa(muchii[i].a)!=grupa(muchii[i].b))
{
cost+=muchii[i].cost; nr++;
reuniune(muchii[i].a,muchii[i].b);
rasp.push_back(muchii[i]);
}
}
printf("%d\n%d\n", cost,nr);
for(i=0; i<rasp.size(); i++)
printf("%d %d\n", rasp[i].a,rasp[i].b);
}