Cod sursa(job #2016285)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 29 august 2017 01:49:11
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <cstdio>

using namespace std;

#define inf 10000000

int n,m,C[10000][10000],viz[10000],sum=0,min=99999,l,c,sol[10000][10000],nrtot=0;

void Read()
{
    int aux1,aux2,co;
    freopen("apm.in","r",stdin);
    //freopen("apm.out","w",stdout);
    scanf("%i %i",&n,&m);

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i == j)
                C[i][j] = 0;
            else
                C[i][j] = inf;
        }
    }

    for(int i=1;i<=m;i++)
    {
        scanf("%i %i %i",&aux1,&aux2,&co);
        C[aux1][aux2] = C[aux2][aux1] = co;
    }
}

void Prim(int nod)
{
    viz[nod] = 1;
    for(int i=2;i<=n;i++)
    {
        min = inf;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(viz[j] == 0 && viz[i] == 1 && C[i][j] < min)
                {
                    min = C[i][j];
                    l = i;
                    c = j;
                }
            }
        }
        sum += min;
        viz[c] = 1;
        sol[l][c] = 1;
        nrtot++;
    }
}

int main()
{
    Read();
    Prim(1);
    printf("%i\n%i\n",sum,nrtot);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(sol[i][j] == 1)
            printf("%i %i\n",i,j);
        }
    }
    return 0;
}