Cod sursa(job #3330031)

Utilizator DasapSapunaru Daniel Dasap Data 17 decembrie 2025 10:24:03
Problema Radiatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;int n,m,q,tata[15001],rnk[15001],rsp[15001],a,b,i,val;set<int>s[15001];
struct qer{int val,a,b;}v[30001];
struct comp{
    bool operator()(const qer &a,const qer &b){
        return a.val<b.val;
    }
};
int fnd(int nod){
    if(tata[nod]==nod)return nod;
    return tata[nod]=fnd(tata[nod]);
}
void unite(int a,int b){
    a=fnd(a);b=fnd(b);
    if(a==b)return;
    if(rnk[a]>rnk[b])swap(a,b);
    if(rnk[a]==rnk[b])rnk[b]++;
    tata[a]=b;
    for(auto x:s[a]){
        if(s[b].find(x)==s[b].end())s[b].insert(x);
        else rsp[x]=val;
    }
    s[a].clear();
}
ifstream fin("radiatie.in");ofstream fout("radiatie.out");
int main(){
    fin>>n>>m>>q;for(i=1;i<=n;i++){tata[i]=i;rnk[i]=1;}
    for(i=1;i<=m;i++)fin>>v[i].a>>v[i].b>>v[i].val;
    sort(v+1,v+m+1,comp());
    for(i=1;i<=q;i++){
        fin>>a>>b;
        s[a].insert(i);
        s[b].insert(i);
    }
    for(i=1;i<=m;i++){
        a=v[i].a;
        b=v[i].b;
        val=v[i].val;
        for(auto x:s[a])cout<<x<<' ';cout<<'\n';
        for(auto x:s[b])cout<<x<<' ';cout<<'\n';
        cout<<'\n';
        unite(a,b);
    }
    for(i=1;i<=q;i++)fout<<rsp[i]<<'\n';
}