Pagini recente » infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #1107471) | Cod sursa (job #3212342) | Cod sursa (job #2916370) | Cod sursa (job #302622)
Cod sursa(job #302622)
#include <fstream.h>
#define NMAX 200001
#define MMAX 400001
ifstream f("apm.in");
ofstream g("apm.out");
int n,m,L[NMAX];
struct muchie{int x,y,c;};
muchie u[MMAX],v[MMAX];
void init()
{for (int i=1;i<=n;i++) L[i]=i;
}
int parinte(int p)
{while(L[p]!=p)
p=L[p];
return p;
}
void citire()
{int i; f>>n>>m;
for(i=1;i<=m;i++) f>>u[i].x>>u[i].y>>u[i].c;
f.close();
}
void sortare(int s, int d)
{int aux,i=s,j=d,pi=0,pj=1;
muchie aux1;
if(s<d)
{while(i<j)
{if(u[i].c>u[j].c) {aux1=u[i]; u[i]=u[j]; u[j]=aux1; aux=pi; pi=pj; pj=aux;}
i+=pi; j-=pj;
}
sortare(s, i-1); sortare(i+1, d);
}
}
int main()
{int i=1,j,k=0,x,y;
long long ct=0;
citire();
sortare(1, m);
init();
while(k<n-1)
{x=parinte(u[i].x);
y=parinte(u[i].y);
if(x!=y)
{k++; ct=ct+u[i].c;
v[k]=u[i];
L[parinte(u[i].y)]=x;
}
i++;
}
g<<ct<<'\n'<<n-1<<'\n';
for(i=1; i<n; i++)
g<<v[i].x<<' '<<v[i].y<<'\n';
g.close(); f.close();
return 0;
}