Cod sursa(job #1542458)

Utilizator ipus1Stefan Enescu ipus1 Data 5 decembrie 2015 13:22:15
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct aa{int x,y,c;};
aa vec[400001];
bool sortare(aa a, aa b)
    {if(a.c<b.c)
        return 1;
    return 0;
    }
int dad[200001];
struct aaa{int x,y;};
aaa v[200000];
int main ()
{freopen ("apm.in","r",stdin);
freopen ("apm.out","w",stdout);
int n,m,i,j,k,x,s=0,nr=0;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
    scanf("%d%d%d",&vec[i].x,&vec[i].y,&vec[i].c);
sort(vec+1,vec+m+1,sortare);
for(i=1;i<=n;i++)
    dad[i]=i;
for(i=1;i<=m;i++)
    {k=vec[i].x;
    x=vec[i].y;
    while(k!=dad[k])
        k=dad[k];
    while(x!=dad[x])
        x=dad[x];
    if(k!=x)
        {dad[x]=k;
        s+=vec[i].c;
        nr++;
        v[nr].x=vec[i].x;
        v[nr].y=vec[i].y;
        }
    }
printf("%d\n%d\n",s,nr);
for(i=1;i<=nr;i++)
    printf("%d %d\n",v[i].x,v[i].y);
return 0;
}