Pagini recente » Cod sursa (job #84983) | Cod sursa (job #890179) | Cod sursa (job #465536) | Istoria paginii preoni-2004 | Cod sursa (job #921653)
Cod sursa(job #921653)
#include <cstdio>
FILE *f=fopen("kruskal.in","r");
FILE *g=fopen("krukal.out","w");
int n,i,sw,k,j,cost,m;
int l[200001];
struct nod
{
int ei,ef,c;
}v[400001],aux;
struct lista
{
int ei,ef;
}vect[200000];
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
fscanf(f,"%d %d %d",&v[i].ei,&v[i].ef,&v[i].c);
do
{
sw=0;
for(i=1;i<m;i++)
if(v[i].c>v[i+1].c)
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
sw=1;
}
else
if(v[i].c==v[i+1].c)
if(v[i].ei>v[i+1].ei)
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
sw=1;
}
else
if(v[i].ei==v[i].ei)
if(v[i].ef>v[i].ef)
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
sw=1;
}
}
while(sw==1);
for(i=1;i<=n;i++)
l[i]=i;
k=1;
cost=0;
i=1;
while(k<n)
{
if(l[v[i].ei]!=l[v[i].ef])
{
vect[k].ei=v[i].ei;
vect[k].ef=v[i].ef;
k++;
cost+=v[i].c;
for(j=1;j<=n;j++)
if(l[j]==l[v[i].ei])
l[j]=l[v[i].ef];
}
i++;
}
k--;
fprintf(g,"%d\n%d\n",cost,k);
for(i=1;i<=k;i++)
fprintf(g,"%d %d\n",vect[i].ei,vect[i].ef);
fclose(f);
fclose(g);
return 0;
}