Cod sursa(job #2697537)

Utilizator cristina.elenaCaraman Cristina cristina.elena Data 18 ianuarie 2021 21:19:33
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.29 kb
#include <iostream>
#include <fstream>
#include<vector>
#define NMAX 400000
using namespace std;
ifstream f("kruskal.in");
ofstream g("kruskal.out");
int n,m,x,y,c,grupuri[NMAX],cost_total;
struct muchie
{
    int x,y,c;
} V[NMAX],W[NMAX];

//functie de sortare crescatoare a vectorului in functie de cost
void sortare(muchie V[NMAX], int n)
{
    for(int i = 1; i <m; i++)
    {
        for(int j = i + 1; j <=m; j++)
        {
            if(V[i].c > V[j].c)
            {
                muchie aux = V[i];
                V[i] = V[j];
                V[j] = aux;
            }
        }
    }
}


int main()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        f>>V[i].x>>V[i].y>>V[i].c;

    }
    sortare(V,n);


    int k=1;



    for(int i=1; i<=m; i++)
    {

        if(grupuri[V[i].x]==0&& grupuri[V[i].y]==0)
        {

            grupuri[V[i].x]=k;
            grupuri[V[i].y]=k;
            W[i].x=V[i].x;
            W[i].y=V[i].y;
            W[i].c=V[i].c;
            k++;


        }

        if(grupuri[V[i].x]==0&&grupuri[V[i].y]!=0)
        {



            grupuri[V[i].x]=grupuri[V[i].y];
            W[i].x=V[i].x;
            W[i].y=V[i].y;
            W[i].c=V[i].c;





        }


        if(grupuri[V[i].x]!=0&&grupuri[V[i].y]==0)
        {


            grupuri[V[i].y]=grupuri[V[i].x];
            W[i].x=V[i].x;
            W[i].y=V[i].y;
            W[i].c=V[i].c;




        }

        if(grupuri[V[i].x]!=0&& grupuri[V[i].y]!=0&&grupuri[V[i].x]!= grupuri[V[i].y])
        {
            int aux,aux2;
            aux=grupuri[V[i].x];
            aux2=grupuri[V[i].y];


            W[i].x=V[i].x;
            W[i].y=V[i].y;
            W[i].c=V[i].c;
            for(int j=1; j<=n; j++)
            {
                if(grupuri[j]==aux)
                    grupuri[j]=aux2;
            }



        }

    }

    /* for(int k=1; k<=n; k++)
     {
         if(grupuri[k]!=0)
             cout<<grupuri[k]<<" ";
     }
     cout<<endl;*/


    for(int i=1; i<=m; i++)
    {
        if(W[i].x!=0&&W[i].y)
        {

            cost_total=cost_total+W[i].c;


            g<<"["<<W[i].x<<"->"<<W[i].y<<"] "<<endl;
        }
    }
    g<<cost_total;

    return 0;
}