Cod sursa(job #3335141)

Utilizator parrot279Sofi Tudose parrot279 Data 21 ianuarie 2026 18:26:44
Problema Radiatie Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
const int nmax = 15005;
int radacina(int nod);

int n, m, k, tata[nmax], ans[nmax];
set<int> q[nmax];
struct ura
{
    int x, y, c;
};
vector<ura> muchii;
bool cmp(ura a, ura b)
{
    return a.c < b.c;
}

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

    for(int i = 1; i <= n; ++i)
        tata[i] = i;
    for(int i = 1; i <= m; ++i)
    {
        int x, y, c;
        fin>>x>>y>>c;
        muchii.push_back({x, y, c});
    }
    sort(muchii.begin(), muchii.end(), cmp);
    for(int i = 1; i <= k; ++i)
    {
        int x, y;
        fin>>x>>y;
        q[x].insert(i);
        q[y].insert(i);
    }

    for(int i = 0; i < m; ++i)
    {
        int rx = radacina(muchii[i].x), ry = radacina(muchii[i].y), cost = muchii[i].c;
        if(rx == ry)
            continue;

        int nrq = q[rx].size();
        auto it = q[rx].begin();
        while (it != q[rx].end())
        {
            int query = *it;

            if (q[ry].find(query) != q[ry].end())
            {
                ans[query] = cost;
                q[ry].erase(query);

                it = q[rx].erase(it);
            }
            else
            {
                ++it;
            }
        }
        for(auto query : q[ry])
        {
            q[rx].insert(query);
        }
        q[ry].clear();
        tata[ry] = rx;
    }
    for(int i = 1; i <= k; ++i)
        fout<<ans[i]<<"\n";




    return 0;
}

int radacina(int nod)
{
    int r = nod;
    while(tata[r] != r)
        r = tata[r];
    while(tata[nod] != nod)
    {
        int aux = nod;
        nod = tata[nod];
        tata[aux] = r;
    }
    return r;
}