Pagini recente » Cod sursa (job #1879164) | Cod sursa (job #2702513) | Cod sursa (job #1382348) | Cod sursa (job #2579850) | Cod sursa (job #2174050)
#include <bits/stdc++.h>
#include <queue>
#define INF 50000
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct triplet{
int x,y,c;
bool used;
};
triplet v[400005];
int f(triplet a,triplet b)
{
return a.c<b.c;
}
long long int n,m,costTotal=0;
int TT[200005];
int find(int x)
{
while(TT[x]!=x) x=TT[x];
return TT[x];
}
void unite(int x,int y)
{
x=find(x);
y=find(y);
int minim= min(x,y);
int maxim= max(x,y);
TT[maxim]=minim;
}
int totalUsed=0;
int noe;
int main()
{
fin>>n>>m;
noe=n-1;
for(int i=1;i<=n;i++) TT[i]=i;
for(int i=1;i<=m;i++)
{
fin>>v[i].x>>v[i].y>>v[i].c;
}
sort(v+1,v+m+1,f);
for(int i=1;i<=m && noe>0 ;i++)
{
if(find(v[i].x)!=find(v[i].y))
{
totalUsed++;
unite(v[i].x,v[i].y);
costTotal+=v[i].c;
v[i].used=true;
}
}
fout<<costTotal<<'\n'<<totalUsed<<'\n';
for(int i=1;i<=m;i++)
if(v[i].used== true)
fout<<v[i].y<<' '<<v[i].x<<endl;
return 0;
}