Cod sursa(job #2155177)

Utilizator nnnmmmcioltan alex nnnmmm Data 7 martie 2018 17:43:23
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <algorithm>

const int NMAX=200001;

struct Muchie
{
 int x,y,c;
};

bool cmp(Muchie A,Muchie B)
{
 return A.c<B.c;
}

Muchie muchii[NMAX];
int sef[NMAX];

int Find(int x)
{
 if(sef[x]==x)
    return x;
 return Find(sef[x]);
}

void Union(int x,int y)
{
 sef[Find(x)]=Find(y);
}

std::vector<int> vans;

int main()
{
 FILE *in=fopen("apm.in","r");
 FILE *out=fopen("apm.out","w");

 int n,m;
 fscanf(in,"%d %d ",&n,&m);
 for(int i=1;i<=m;i++)
     {
      fscanf(in,"%d %d %d ",&muchii[i].x,&muchii[i].y,&muchii[i].c);
     }
 std::sort(muchii+1,muchii+m+1,cmp);
 for(int i=1;i<=n;i++)
     sef[i]=i;

 int ans=0;
 for(int i=1;i<=m;i++)
     {
      if(Find(muchii[i].x)!=Find(muchii[i].y))
         {
          ans+=muchii[i].c;
          Union(muchii[i].x,muchii[i].y);
          vans.push_back(i);
         }
     }
 fprintf(out,"%d\n%d\n",ans,n-1);
 for(auto &i:vans)
     fprintf(out,"%d %d\n",muchii[i].x,muchii[i].y);
 fclose(in);
 fclose(out);
 return 0;
}