Cod sursa(job #3278582)

Utilizator Frant_IoanaFrant Ioana Frant_Ioana Data 20 februarie 2025 10:45:44
Problema Radiatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

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

int n, m, k, x, y, z, f[15001], d[15001][15001];
bool isInFrom[15001];
vector<vector<pair<int, int> > > v(15001);
vector<pair<int, int> > muchii;
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
priority_queue<pair<int, int>, vector<pair<int, int> > > fq;

int main(){
    fin >> n >> m >> k;
    for(int i = 1; i <= m; i++){
        fin >> x >> y >> z;
        v[x].push_back({y, z});
        v[y].push_back({x, z});
    }

    for(int i = 1; i <= k; i++){
        fin >> x >> y;
        f[x]++;
        f[y]++;
        muchii.push_back({x, y});
    }

    for(int i = 1; i <= n; i++){
        fq.push({f[i], i});
    }

    vector<int> from;
    int sum = 0;
    while(sum < m){
        pair<int, int> pairF = fq.top();
        fq.pop();
        sum += pairF.first;
        from.push_back(pairF.second);
        isInFrom[pairF.second] = 1;
    }

    for(auto nod : from){
        for(int i = 1; i <= n; i++)
            d[nod][i] = 2e9;

        d[nod][nod] = 0;
        q.push({0, nod});
        while(q.size()){
            pair<int, int> myPair = q.top();
            q.pop();
            int myLung = myPair.first;
            int myNod = myPair.second;

            for(auto vecin : v[myNod]){
                int nodVecin = vecin.first;
                int lungTunel = vecin.second;

                if(d[nod][nodVecin] > max(d[nod][myNod], lungTunel)){
                    d[nod][nodVecin] = max(d[nod][myNod], lungTunel);
                    q.push({d[nod][nodVecin], nodVecin});
                }
            }
        }
    }

    for(auto i : muchii){
        if(isInFrom[i.first])
            fout << d[i.first][i.second];
        else
            fout << d[i.second][i.first];
        fout << '\n';
    }
}