Cod sursă (job #675998)

Utilizator avatar petrut16 Gheorghies Petrut-Rares petrut16 IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator cpp-32 | 1,19 kb
Rundă vaslui_cls1112_15.11 Status evaluat
Dată 15 nov. 2022 20:04:50 Scor 30
#include <bits/stdc++.h>
#define N 105
using namespace std;
ifstream fin("zapada.in");
ofstream fout("zapada.out");
struct muchie
{
    int x,y,cost;
    bool operator < (const muchie x) const
    {
        return x.cost>cost;
    }
};
int n,m,k,t[N],nrcc,S;
void Union(int x,int y)
{
    t[y]=x;
}
int Find(int x)
{
    int rad=x,y;
    while(t[rad]) rad=t[rad];
    /// comnprimam drumurile, adica toate nodurile
    /// din traseul de la x la rad se leaga direct de rad
    while (x != rad)
    {
        y = t[x];
        t[x] = rad;
        x = y;
    }
    return rad;
}
multiset<muchie>edges;
void Kruskal()
{

    nrcc=n;S=0;
    for(auto i:edges)
        if(nrcc>1)
    {
        int x=Find(i.x);
        int y=Find(i.y);
        if(x!=y)
        {
            Union(x,y);
            nrcc--;
            S+=i.cost;
        }
    }
}
int main()
{
    int i,x,y,c,k;
    fin>>n>>m>>k;
    while(m--)
        fin>>x>>y>>c,
        edges.insert({x,y,c});
    Kruskal();
    fout<<S<<"\n";
    for(i=1;i<=k;i++)
    {
        fin>>x>>y>>c;memset(t,0,sizeof(t));
        edges.insert({x,y,c});
        Kruskal();fout<<S<<"\n";
    }
    return 0;
}