Cod sursa(job #2388745)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 26 martie 2019 13:23:52
Problema Arbore partial de cost minim Scor 40
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
typedef struct
{
    int X,Y,Cost;
}triplet;
vector <triplet> v,APM;
int *r,N;
bool myFunction(triplet a,triplet b)
{
    return (a.Cost<b.Cost);
}
void initializare(int u)
{
    r[u]=u;
}
int reprez(int u)
{
    return r[u];
}
void reuneste(int u,int v)
{
    int r1=reprez(u);
    int r2=reprez(v);
    for(int k=1;k<=N;k++)
    {
        if(r[k]==r2)
        {
            r[k]=r1;
        }
    }
}/*
bool exista_ciclu(vector <triplet> APM,int x,int y,int cost)
{
    triplet t;
    t.X=x;
    t.Y=y;
    t.Cost=cost;
    APM.push_back(t);
    int i;

    return 1;
}*/
int main()
{

    ifstream fin("apm.in");
    ofstream fout("apm.out");
    triplet T;

    int i,M,cntAPM=0,costAPM=0;
    fin>>N>>M;
    r=new int[N];
    int *r;
    for(i=0;i<M;i++)
    {
        fin>>T.X>>T.Y>>T.Cost;
        v.push_back(T);
    }
    sort(v.begin(),v.begin()+M,myFunction);
    for(i=1;i<=N;i++)
    {
        initializare(i);
    }
    for(i=0;i<M;i++)
    {

        if(reprez(v[i].X)!=reprez(v[i].Y))
        {
            costAPM+=v[i].Cost;

            APM.push_back(v[i]);
            reuneste(v[i].X,v[i].Y);
        }


    }
    fout<<costAPM<<'\n';
    fout<<APM.size()<<'\n';
    for(i=0;i<APM.size();i++)
    {
        fout<<APM[i].X<<' '<<APM[i].Y<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}