Pagini recente » Cod sursa (job #2752794) | Cod sursa (job #3133883) | Cod sursa (job #717152) | Cod sursa (job #726851) | Cod sursa (job #2572728)
#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)
{
if(a.x==b.x)
return a.y<b.y;
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,j,t=0,x,y,c,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;i++)
{
if(t==n-1)
break;
x=g[i].x;
y=g[i].y;
c=g[i].c;
if(u_find(x)!=u_find(y))
{
t++;
s=s+c;
u_union(x,y);
sol[++nrs].x=x;
sol[nrs].y=y;
sol[nrs].c=c;
}
}
out<<s<<"\n"<<nrs<<"\n";
for(i=1;i<n;i++)
out<<sol[i].x<<" "<<sol[i].y<<"\n";
return 0;
}