Cod sursa(job #3310929)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 17 septembrie 2025 22:52:20
Problema Radiatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
struct Muchie {
    int x, y, lg;
} a[30002], b[15002];
int rasp[15002], tata[15002];
int n, m, k, i;

vector<int> gr[30002], cur[30002];

static inline int Tata(int a) {
    if(tata[a] == a) return a;
    return tata[a] = Tata(tata[a]);
}

static inline bool Cmp(Muchie a, Muchie b) {
    return a.lg < b.lg;
}

int main() {
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> n >> m >> k;
    for(i = 1; i <= m; i++) fin >> a[i].x >> a[i].y >> a[i].lg;
    for(i = 1; i <= k; i++)  {
        fin >> b[i].x >> b[i].y;
        gr[b[i].x].push_back(i);
        gr[b[i].y].push_back(i);
    }

    for(i = 1; i <= n; i++) {
        cur[i].push_back(i);
        tata[i] = i;
    }

    sort(a + 1, a + m + 1, Cmp);

    for(i = 1; i <= m; i++)  {
        int ta = Tata(a[i].x);
        int tb = Tata(a[i].y);

        if(ta != tb) {
            if(cur[ta].size() > cur[tb].size()) swap(ta, tb);
            for(int nod : cur[ta]) {
                for(int j : gr[nod]) {
                    int y = b[j].x + b[j].y - nod;

                    if(Tata(y) == tb) rasp[j] = a[i].lg;
                }

                cur[tb].push_back(nod);
            }

            tata[ta] = tb;

            cur[ta].clear();
        }
    }
    for(i = 1; i <= k; i++) fout << rasp[i] << "\n";

    return 0;
}