Pagini recente » Cod sursa (job #2257501) | Cod sursa (job #1536850) | Cod sursa (job #1391147) | Cod sursa (job #298611) | Cod sursa (job #2173442)
#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)
{
if(TT[x]==x) return x;
else TT[x]=find(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 main()
{
fin>>n>>m;
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;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;
}