Cod sursă (job #758961)

Utilizator avatar Razvan23 Razvan Mosanu Razvan23 IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp-32 | 1,27 kb
Rundă Arhiva de probleme Status evaluat
Dată 28 ian. 2024 16:57:56 Scor 40
#include <bits/stdc++.h>
using namespace std;

ifstream fin("zapada.in");
ofstream fout("zapada.out");

struct Trei
{
    int x, y, c;
    bool operator<(const Trei e) const
    {
        return c < e.c;
    }
} a[102005];

int t[12005];
int n, m, k;

int FindRoot(int x)
{
    int rad, y;
    rad = x;
    while(t[rad] != 0)
        rad = t[rad];
    while(x != rad)
    {
        y = t[x];
        t[x] = rad;
        x = y;
    }
    return rad;
}

void Union(int x, int y)
{
    t[y] = x;
}

int Kruskal()
{
    int nrc, cost, x, y, i;
    cost = 0;
    nrc = n;
    for(i=1;nrc > 1;i++)
    {
        x = FindRoot(a[i].x);
        y = FindRoot(a[i].y);
        if(x != y)
        {
            Union(x, y);
            nrc--;
            cost += a[i].c;
        }
    }
    return cost;
}

int main()
{
    int i, j;
    fin >> n >> m >> k;
    for(i=1;i<=m;i++)
        fin >> a[i].x >> a[i].y >> a[i].c;
    sort(a + 1, a + m + 1);
    fout << Kruskal() << "\n";
    for(i=1;i<=k;i++)
    {
        m++;
        fin >> a[m].x >> a[m].y >> a[m].c;
        for(j=1;j<=n;j++)
            t[j] = 0;
        sort(a + 1, a + m + 1);
        fout << Kruskal() << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}