Cod sursa(job #1788111)

Utilizator StefanTifreaStefan Tifrea StefanTifrea Data 25 octombrie 2016 18:01:27
Problema Arbore partial de cost minim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
using namespace std;
//ifstream fin("date.in");
ifstream fin("apm.in");
ofstream fout("apm.out");
int a[100][100],m,n,v=1,s[100],min1,t[100],nr=0;
long int infinit=1000000;
void citire()
{
    int i,j,x,y,z;
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i==j)
                a[i][j]=0;
            else
                a[i][j]=infinit;
    for(i=1;i<=m;i++)
        fin>>x>>y>>z,a[x][y]=z,a[y][x]=z;
}
int cauta_nod(int &nod)
{
    min1=infinit;
    for(int i=1;i<=n;i++)
        if(s[i]!=0)
            if(a[i][s[i]]<min1)
            {
                min1=a[i][s[i]];
                nod=i;
            }
    return min1;
}
void actualizeaza(int nod)
{
    for(int i=1;i<=n;i++)
        if(s[i]!=0)
            if(a[i][s[i]]>a[i][nod])
                s[i]=nod;
}
int main()
{
    int k,i,j,cost=0,nod=1;
    citire();
    s[v]=0;
    for(i=1;i<=n;i++)
        if(i!=v)
            s[i]=v;
    for(k=1;k<=n-1;k++)
    {
        min1=cauta_nod(nod);
        t[nod]=s[nod];
        cost=cost+min1;
        s[nod]=0;
        actualizeaza(nod);
    }
    fout<<cost<<endl;
    for(i=1;i<=n;i++)
        if(i!=v)
            nr++;
    fout<<nr<<endl;
    for(i=1;i<=n;i++)
        if(i!=v)
            fout<<t[i]<<" "<<i<<endl;
    return 0;
}