Pagini recente » Cod sursa (job #1481824) | Cod sursa (job #1433245) | Cod sursa (job #2938774) | Cod sursa (job #2861237) | Cod sursa (job #2600111)
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int DN=1e6+5;
int n,m,pr[DN];
pair<int,pair<int,int> >mc[DN];
priority_queue<pair<int,int> >pq;
vector<pair<int,int> >sol;
long long sum;
int getpr(int nod)
{
if(pr[nod]==nod)
return nod;
pr[nod]=getpr(pr[nod]);
return pr[nod];
}
void unesc(int f,int g,int cost)
{
f=getpr(f);
g=getpr(g);
if(f==g)
return;
pr[f]=g;
sol.push_back({f,g});
sum+=cost;
}
int main()
{
FILE *fin=fopen("apm.in","r");
FILE *fout=fopen("apm.out","w");
fscanf(fin,"%d%d",&n,&m);
for(int i=1;i<=m;i++)
fscanf(fin,"%d%d%d",&mc[i].y.x,&mc[i].y.y,&mc[i].x);
for(int i=1;i<=n;i++)
pr[i]=i;
sort(mc+1,mc+m+1);
for(int pz=1;pz<=m;pz++)
{
int f=mc[pz].y.x;
int g=mc[pz].y.y;
unesc(f,g,mc[pz].x);
}
fprintf(fout,"%d\n",sum);
fprintf(fout,"%d\n",(int)sol.size());
for(auto i:sol)
fprintf(fout,"%d %d\n",i.x,i.y);
}