Cod sursa(job #2576529)

Utilizator MateGMGozner Mate MateGM Data 6 martie 2020 20:12:31
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX=400005;
ifstream be("apm.in");
ofstream ki("apm.out");
struct el{
int x,y,ertek;
}a[NMAX];
int l[200005];
int n,m;
int kivalaszt[200005];
int osszertek;
void read()
{
    be>>n>>m;
    for(int i=1;i<=m;i++)
        be>>a[i].x>>a[i].y>>a[i].ertek;
    for(int i=1;i<=n;i++)
        l[i]=i;
}
void rendez()
{
    el seged;
    bool c=true;
    do{
            c=true;
        for(int i=1;i<m;i++){

            if(a[i].ertek>a[i+1].ertek)
        {
            seged=a[i];
            a[i]=a[i+1];
            a[i+1]=seged;
            c=false;
        }
        }
    }while(!c);

}
bool slove()
{
    int i=0,j=1;
    int id;
    while((i<n-1)&&(j<=m))
    {
        if(l[a[j].x]!=l[a[j].y])
        {
         i++;
         kivalaszt[i]=j;
         osszertek=osszertek+a[j].ertek;
         id=l[a[j].y];
         for(int k=1;k<=n;k++)
            if(id==l[k])
            l[k]=l[a[j].x];
        }
        j++;
    }
    return i==n-1;
}
int main()
{
    read();
    rendez();

  if(slove())
  {
      ki<<osszertek<<"\n";
      ki<<n-1<<"\n";
      for(int i=1;i<n;i++){
        ki<<a[kivalaszt[i]].y<<" "<<a[kivalaszt[i]].x<<" ";
        ki<<"\n";
      }
  }
    return 0;
}