Cod sursă (job #342144)

Utilizator avatar andreeagoidea Andreea Goidea andreeagoidea IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp | 1,46 kb
Rundă Arhiva de probleme Status evaluat
Dată 22 ian. 2018 12:13:17 Scor 0
#include <cstdio>
#include <algorithm>

using namespace std;

struct drum
{
    int nod1, nod2, cost;
};

drum v[101002];

int tati[10001];

int i, n, m, costmin, k, j, nrsol;

bool cmp(const drum a, const drum b)
{
    if(a.cost<b.cost)
        return true;
    return false;
}

int tata(int nod)
{
    if(tati[nod]==nod)
        return nod;
    else
        return tati[nod]=tata(tati[nod]);
}

void join(int nod, int node)
{
    int rx, ry;
    rx=tata(nod);
    ry=tata(node);
    tati[rx]=ry;
}

int main()
{
    freopen("zapada.in", "r", stdin);
    freopen("zapada.out", "w", stdout);
    scanf("%d%d%d", &n, &m, &k);
    for(j=1; j<m; j++)
        scanf("%d%d%d", &v[j].nod1, &v[j].nod2, &v[j].cost);
    for(j; j<=k+m; j++)
    {

        scanf("%d%d%d", &v[j].nod1, &v[j].nod2, &v[j].cost);
        for(i=1; i<=n; i++)
            tati[i]=i;
        if(v[j].cost>v[n-1].cost)
            printf("%d\n", costmin);
        else
        {
            costmin=0;
            sort(v+1, v+j+1, cmp);
            i=1;
            nrsol=1;
            while(nrsol<n && i<=m)
            {
                if(tati[tata(v[i].nod1)]!=tati[tata(v[i].nod2)])
                {
                    costmin=costmin+v[i].cost;
                    join(v[i].nod1, v[i].nod2);
                    nrsol++;
                }
                i++;
            }
            printf("%d\n", costmin);
        }
    }
    return 0;
}