Cod sursă (job #353175)

Utilizator avatar pionierul22 ana liza pionierul22 IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp | 1,02 kb
Rundă Arhiva de probleme Status evaluat
Dată 15 feb. 2018 22:39:58 Scor 40
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#define nmax 1001
#define mmax 101001
using namespace std;
ifstream fin("zapada.in");
ofstream fout("zapada.out");
int n,m,k;

struct Muchie
{
    int x,y,c;
};

int a[nmax];
Muchie L[mmax];

void unific(int c1, int c2)
{
    int f=min(a[c1],a[c2]);
    int g=max(a[c1],a[c2]);

    for(int i=1;i<=n;i++)
        if(a[i]==g)
        a[i]=f;
}

int criteriu(Muchie a, Muchie b)
{
    return a.c<b.c;
}

int main()
{
    fin>>n>>m>>k;

    for(int i=1;i<=m;i++)
    fin>>L[i].x>>L[i].y>>L[i].c;

    for(int l=1;l<=k+1;l++)
{
    sort(L+1,L+1+m,criteriu);

    for(int i=1;i<=n;i++)
        a[i]=i;

    int i=1,nr=n-1,costmin=0;

    while(nr>0)
    {
        if(a[L[i].x]!=a[L[i].y])
        {
            costmin+=L[i].c;
            unific(L[i].x,L[i].y);
            nr--;
        }
        i++;
    }
     fout<<costmin<<'\n';
        m++;
        fin>>L[m].x>>L[m].y>>L[m].c;
}

    return 0;
}