Pagini recente » Cod sursa (job #92574) | Cod sursa (job #278890) | Cod sursa (job #2280885) | Cod sursa (job #838595) | Cod sursa (job #2278890)
#include <bits/stdc++.h>
using namespace std;
int n,m,t[200005],muchii,sum;
struct muchie
{
int nod1,nod2,cost;
} vect[400005],sol[400005];
bool cmp(muchie A,muchie B)
{
return A.cost<B.cost;
}
int sef(int nod)
{
if(nod==t[nod])
return nod;
return t[nod]=sef(t[nod]);
}
void join(int nod1,int nod2)
{
t[sef(nod2)]=sef(nod1);
}
int main()
{
int x,y;
FILE* in=fopen("apm.in","r");
FILE* out=fopen("apm.out","w");
fscanf(in,"%d",&n);
fscanf(in,"%d",&m);
for(int i =1; i<=m; i++)
{
fscanf(in,"%d%d%d",&vect[i].nod1,&vect[i].nod2, &vect[i].cost);
}
sort(vect+1,vect+m+1,cmp);
for(int i=1; i<=n; i++)
t[i]=i;
for(int i=1; i<=m&&muchii<=n-1; i++)
{
// printf("%d", i);
if(sef(vect[i].nod1)!=sef(vect[i].nod2))
{
sum+=vect[i].cost;
muchii++;
join(vect[i].nod1,vect[i].nod2);
sol[i].nod1=vect[i].nod1;
sol[i].nod2=vect[i].nod2;
}
}
fprintf(out,"%d\n%d\n",sum, muchii);
for(int i =1;i<=muchii;i++)
{
fprintf(out,"%d %d\n",sol[i].nod1,sol[i].nod2);
}
}