Cod sursa(job #1348285)

Utilizator sulzandreiandrei sulzandrei Data 19 februarie 2015 16:58:49
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct ele
{
    int x,y,c,e;
};
bool cmp(struct ele a,struct ele b)
{
    if (a.c<b.c)
        return true;
    return false;
}

int main()
{
    int n,m,i,j;
    in>>n>>m;
    struct ele v[m+1];
    int exis[n+1];
    for(i=1;i<=n;i++)
        exis[i]=i;
    struct ele ao;
    for(i=1;i<=m+1;i++)
        v[i].e =3;
    for(i=1;i<=m;i++)
    {
        in>>ao.x;
        in>>ao.y;
        in>>ao.c;
        v[i] = ao;
        v[i].e = 0;
    }
    sort(v+1,v+m+1,cmp);
    int costul=0,nr=0;
    for(i = 1;i<=m;i++)
    {
        if (!(exis[v[i].x]== exis[v[i].y]))
        {
            for(j=1;j<=n;j++)
                if (exis[j] == exis[v[i].x] &&j!=v[i].x)
                    exis[j] = exis[v[i].y];
            nr++;
            exis[v[i].x]=exis[v[i].y];
            costul +=v[i].c;
        }
        else
          v[i].e = 1;
    }
    out<<costul<<"\n";
    out<<nr<<"\n";
    for(i=1;i<=m;i++)
        if(v[i].e==0)
            out<<v[i].x<<" "<<v[i].y<<" "<<"\n";
    return 0;
}