Cod sursa(job #2544921)

Utilizator jbgvdjbfBunea Alex jbgvdjbf Data 12 februarie 2020 17:49:46
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#define NMAX 101
#define MMAX 1001
#include <algorithm>
using namespace std;
    ifstream f("f.in");
    struct muchie{int v1,v2,c;};
    int t[NMAX],h[NMAX],n,m;
    muchie a[MMAX],apm[NMAX];
    void citire()
    {
        f>>n>>m;
        for(int i=1;i<=m;i++)
        f>>a[i].v1>>a[i].v2>>a[i].c;
    }
    bool compare(muchie a,muchie b)
    {
        if(a.c<b.c)
        return 1;
        else
        return 0;
    }
    int radacina(int x)
    {
        if(t[x]==0)
            return x;
            else
            return radacina(t[x]);
    }
    void Kruskhal()
    {
        int j=1,x,y,r1,r2;
        for(int i=1;i<=m;i++)
            {
                x=a[i].v1;
                y=a[i].v2;
                r1=radacina(x);
                r2=radacina(y);
                if(r1!=r2)
                {
                    apm[j]=a[i];
                    j++;
                    if(h[r1]>h[r2])
                    t[r2]=r1;
                    else
                    if(h[r1]<h[r2])
                        t[r1]=r2;
                        else
                        {
                            t[r1]=r2;
                            h[r2]++;
                        }
                        if(j==n)
                        break;
                }
            }
    }
int main()
{
    citire();
    sort(a+1,a+m+1,compare);
    Kruskhal();
    int s=0;
    for(int i=1;i<n;i++)
    {
        s+=apm[i].c;
    }
    cout<<s;
    return 0;
}