Pagini recente » Cod sursa (job #2346437) | Cod sursa (job #1977770) | Cod sursa (job #1778671) | Cod sursa (job #2897417) | Cod sursa (job #3140117)
#include <fstream>
#include <algorithm>
#define nmx 200005
using namespace std;
struct edge
{
int a,b,pr;
};
bool cmp (const edge &a,const edge &b)
{
return a.pr<b.pr;
}
int roo[nmx];
int root(int x)
{
if (x==roo[x])
return x;
return roo[x]=root(roo[x]);
}
void join (int x,int y)
{
if (x==y)
return;
roo[x]=y;
}
edge v[nmx],sol[nmx];
int n,m,sum,ct;
int main()
{
ifstream f ("apm.in");
ofstream g ("apm.out");
f>>n>>m;
for (int i=1; i<=m; i++)
f>>v[i].a>>v[i].b>>v[i].pr;
sort (v+1,v+m+1,cmp);
for (int i=1; i<=n; i++)
roo[i]=i;
for (int i=1; i<=m; i++)
{
int a1=root(v[i].a);
int b1=root(v[i].b);
if (a1!=b1)
{
sum+=v[i].pr;
sol[++ct]=v[i];
join(a1,b1);
}
}
g<<sum<<'\n'<<ct<<'\n';
for (int i=1; i<=ct; i++)
g<<sol[i].a<<' '<<sol[i].b<<'\n';
}