Cod sursă (job #363034)

Utilizator avatar danutmaftei Danut Maftei danutmaftei IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp | 1.19 kb
Rundă Arhiva de probleme Status evaluat
Dată 11 mar. 2018 14:53:01 Scor 0
#include <iostream>
#define Mmax 100005
#define Nmax 10005
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin("zapada.in");
ofstream fout("zapada.out");

struct Muchie{
int e1,e2,cost;
}G[Mmax];

int A[Nmax],c[Nmax];

int s,n,m,k;

void citire()
{
    fin>>n>>m>>k;

    for(int i=1;i<=m;++i)
    {
        fin>>G[i].e1>>G[i].e2>>G[i].cost;

    }
    for(int i=1;i<=n;++i)
     c[i]=i;

     fin.close();
}
struct comp{
bool operator ()(Muchie x,Muchie y){
return x.cost < y.cost;
}
};


void Kruskal()
{
    int NrMSel;
    int min,max;

    for(int i=1;NrMSel<n-1;++i)
    {
        if(c[G[i].e1]!=c[G[i].e2])
        {
            A[++NrMSel]=i;
            s+=G[i].cost;
            if(c[G[i].e1]<c[G[i].e2])
            {
                min=c[G[i].e1];
                max=c[G[i].e2];
            }
            else
            {
                min=c[G[i].e2];
                max=c[G[i].e1];
            }

            for(int j=1;j<=n;++j)
              if(c[j]==max)c[j]=min;
                      }
    }
}
int main()
{
    citire();
    sort(G,G+n,comp());
    Kruskal();
    fout<<s<<" ";
    return 0;
}