Pagini recente » Cod sursa (job #2193216) | Cod sursa (job #224495) | Cod sursa (job #2815955) | Cod sursa (job #1954062) | Cod sursa (job #748095)
Cod sursa(job #748095)
#include<stdio.h>
#include<algorithm>
#define dim 400010
using namespace std;
FILE*f=fopen("apm.in","r");
FILE*g=fopen("apm.out","w");
int n , m , i ,P[200010],nr,cost;
bool Fr[dim];
struct muchie{
int x;
int y;
int c;
}V[dim];
int cmp(muchie a, muchie b){
if(a.c<b.c)
return 1;
return 0;
}
int query(int a, int b){
while(P[a]>0)
a=P[a];
while(P[b]>0)
b=P[b];
if(a!=b)
return 1;
return 0;
}
void update(int a, int b){
while(P[a]>0)
a=P[a];
while(P[b]>0)
b=P[b];
if(P[a]>P[b])
P[b]+=P[a],P[a]=b;
else
P[a]+=P[b],P[b]=a;
}
int main(){
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
fscanf(f,"%d%d%d",&V[i].x,&V[i].y,&V[i].c);
sort(V+1,V+m+1,cmp);
for(i=1;i<=n;i++)
P[i]=-1;
for(i=1;i<=m;i++){
if(query(V[i].x,V[i].y)){
update(V[i].x,V[i].y),cost+=V[i].c;
Fr[i]=1;
nr++;
}
}
fprintf(g,"%d\n%d\n",cost,nr);
for(i=1;i<=m;i++)
if(Fr[i])
fprintf(g,"%d %d\n",V[i].x,V[i].y);
return 0;
}