Pagini recente » Cod sursa (job #3148102) | Cod sursa (job #2179632) | Cod sursa (job #2615816) | Cod sursa (job #2955895) | Cod sursa (job #1198058)
#include <cstdio>
#include <algorithm>
#define Mmax 400005
#define Nmax 200005
using namespace std;
struct Edge
{
int a,b,cost;
bool operator <(const Edge A) const
{
return cost<A.cost;
}
};
Edge v[Mmax],sol[Mmax];
int lensol,cost,t[Nmax];
inline void Union(int a, int b)
{
t[a]+=t[b];
t[b]=a;
}
inline int Tata(int a)
{
int rad,i=a;
while(t[a]>0)
a=t[a];
rad=a;
while(t[i]>0)
{
a=t[i];
t[i]=rad;
i=a;
}
return rad;
}
int main()
{
int a,b,i,N,M;
freopen ("apm.in","r",stdin);
freopen ("apm.out","w",stdout);
scanf("%d%d", &N,&M);
for(i=1;i<=N;++i)
t[i]=-1;
for(i=1;i<=M;++i)
scanf("%d%d%d", &v[i].a,&v[i].b,&v[i].cost);
sort(v+1,v+M+1);
for(i=1;i<=M;++i)
{
a=Tata(v[i].a); b=Tata(v[i].b);
if(a!=b)
{
sol[++lensol]=v[i];
cost+=v[i].cost;
Union(a,b);
}
}
printf("%d\n%d\n", cost,lensol);
for(i=1;i<=lensol;++i)
printf("%d %d\n", sol[i].a,sol[i].b);
return 0;
}