Pagini recente » Cod sursa (job #3268213) | Cod sursa (job #3201107) | Cod sursa (job #2916325) | Cod sursa (job #2830160) | Cod sursa (job #419508)
Cod sursa(job #419508)
#include <iostream.h>
#include <fstream.h>
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie{
int x,y,c;
};
muchie a[1503],aux,b[1503];
int t[1503],i,j,n,m,cc,cost,k,nr;
void citire(){
f>>n>>m;
for(i=1;i<=m;i++){
f>>a[i].x>>a[i].y>>a[i].c;
}
}
int pozitie(int i,int j){
int di=0,dj=1,au;
while(i<j){
if(a[i].c>a[j].c){
aux=a[i];
a[i]=a[j];
a[j]=aux;
au=di;
di=dj;
dj=au;
}
i=i+di;
j=j-dj;
}
return i;
}
void divide(int i,int j){
int k;
if(i<j){
k=pozitie(i,j);
divide(i,k-1);
divide(k+1,j);
}
}
void reuneste(int i,int j){
int k;
i=t[i];
j=t[j];
if(i!=j)
for(k=1;k<=n;k++)
if(t[k]==i)
t[k]=j;
}
void kruskal(){
divide(1,m);
for(i=1;i<=n;i++)
t[i]=i;
for(k=1;k<=m;k++){
i=a[k].x;
j=a[k].y;
cc=a[k].c;
if(t[i]!=t[j]){
reuneste(i,j);
cost+=cc;
b[nr].x=i;
b[nr].y=j;
nr++;
}
}
g<<cost<<"\n";
g<<nr<<"\n";
for(i=0;i<nr;i++)
g<<b[i].x<<" "<<b[i].y<<"\n";
}
int main(){
citire();
kruskal();
return 0;
f.close();
g.close();
}