Pagini recente » Cod sursa (job #1822424) | Cod sursa (job #2051501) | Cod sursa (job #1909335) | Cod sursa (job #1786014) | Cod sursa (job #357295)
Cod sursa(job #357295)
#include<fstream.h>
#define Nmax 200001
#define Mmax 400001
int n,m,componenta[Nmax],k; //componenta va retine componenta conexa din care
long suma; //face parte nodul i
struct muchie //numarul de muchii ale arborelui
{unsigned int x,y;
int cost;
};
muchie a[Mmax],L[Mmax]; //a = lista muchiilor grafului neorintat conex
//L = lista muchiilor arborelui partial de cost minim
void citire()
{ifstream fin("apm.in");
fin>>n>>m;
for(int i=1;i<=m;i++)
{fin>>a[i].x>>a[i].y>>a[i].cost;
componenta[i]=i;
}
fin.close();
}
void det_arbore_de_cost_minim()
{int i,v1,v2,j;
for(i=1;i<=m && k<n-1;i++)
if(componenta[a[i].x]!=componenta[a[i].y])
{k++;
L[k]=a[i];suma=suma+a[i].cost;
if(componenta[a[i].x]>componenta[a[i].y])
{v1=componenta[a[i].y]; //valoarea cu care trebuie inlocuit v2
v2=componenta[a[i].x];
}
else
{v1=componenta[a[i].x];
v2=componenta[a[i].y];
}
for(j=1;j<=n;j++)
if(componenta[j]==v2)
componenta[j]=v1;
}
}
void ordonare()
{int i,j;
muchie aux;
for(i=1;i<m;i++)
for(j=i+1;j<=m;j++)
if(a[i].cost>a[j].cost)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
void afisare()
{ofstream fout("apm.out");
fout<<suma<<'\n';
fout<<n-1<<'\n';
for(int i=1;i<=k;i++)
fout<<L[i].x<<" "<<L[i].y<<'\n';
fout.close();
}
int main()
{citire();
ordonare();
det_arbore_de_cost_minim();
afisare();
return 0;
}