Pagini recente » Cod sursa (job #1350028) | Cod sursa (job #69420) | Cod sursa (job #1357911) | Cod sursa (job #590478) | Cod sursa (job #2572759)
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct edge
{
int x,y,c;
}g[400001],sol[100001];
bool cmp(edge a,edge b)
{
if(a.c==b.c)
return a.x<=b.x;
return a.c<b.c;
}
int rad[100001];
int u_find(int i)
{
if(rad[i]==0)
return i;
return u_find(rad[i]);
}
void u_union(int x,int y)
{
int i=u_find(x),j=u_find(y);
rad[j]=i;
}
int main()
{
int n,m,i,t=0,s=0,nrs=0;
in>>n>>m;
for(i=1;i<=m;++i)
in>>g[i].x>>g[i].y>>g[i].c;
sort(g+1,g+m+1,cmp);
for(i=1;i<=m && t<n;++i)
{
if(u_find(g[i].x)!=u_find(g[i].y))
{
t++;
s=s+g[i].c;
u_union(g[i].x,g[i].y);
sol[++nrs].x=g[i].x;
sol[nrs].y=g[i].y;
sol[nrs].c=g[i].c;
}
}
out<<s<<"\n"<<nrs<<"\n";
for(i=1;i<n;++i)
out<<sol[i].x<<" "<<sol[i].y<<"\n";
return 0;
}