Cod sursa(job #1130589)

Utilizator micuhdPop Claudiu micuhd Data 28 februarie 2014 14:11:52
Problema Arbore partial de cost minim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");

short int c[30001][30001];
bool viz[30001];
int tata[30001];
int n,m;
int costtot;
void citire(void)
{
int i,j;
int x,y,cost;
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            c[i][j]=2000;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>cost;
        c[x][y]=cost;
        c[y][x]=cost;
    }
}

void prim(void)
{
int min;
int cop,tat;
    viz[1]=1;
    for(int k=1;k<=n-1;k++)
    {
        min=2000;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if((viz[i]==1) && (viz[j]==0) && (min>c[i][j]))
                {
                    min=c[i][j];
                    tat=i;
                    cop=j;
                }

            }
        viz[cop]=1;
        tata[cop]=tat;
        costtot+=c[cop][tat];
    }

}

int main()
{
    citire();
    prim();
    g<<costtot<<"\n";
    g<<n-1<<"\n";
    for(int i=1;i<=n;i++)
        if(tata[i]!=0)
            g<<i<<" "<<tata[i]<<"\n";

    return 0;
}