Cod sursa(job #3281727)

Utilizator GILIEDAVIDGilie David Florin GILIEDAVID Data 3 martie 2025 15:08:06
Problema Radiatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct bongos
{
    int x,y,c;
}v[300005];
int n,m,k,i,t[15005],h[15005],c[15005],a,b,s;
int rad(int x)
{
    while(x!=t[x]) x=t[x];
    return x;
}
void unif(int x,int y,int cost)
{
    int rx=rad(x);
    int ry=rad(y);
    if(h[rx]<h[ry])
    {
        t[rx]=ry;
        c[rx]=cost;
        h[ry]+=h[rx];
    }
    else
    {
        t[ry]=rx;
        c[ry]=cost;
        h[rx]+=h[ry];
    }
}
int cmp(bongos a,bongos b)
{
    return a.c<b.c;
}
void apm()
{
    sort(v+1,v+m+1,cmp);
    for(int i=1;i<=m;i++)
        if(rad(v[i].x)!=rad(v[i].y))
            unif(v[i].x,v[i].y,v[i].c);
}
int main()
{
    f>>n>>m>>k;
    for(i=1;i<=m;i++)
        f>>v[i].x>>v[i].y>>v[i].c;
    for(i=1;i<=n;i++)
    {
        t[i]=i;
        h[i]=1;
    }
    apm();
    for(i=1;i<=k;i++)
    {
        f>>a>>b;
        s=0;
        //cout<<a<<" "<<b<<endl;
        int ra=a,nva=0;
        while(ra!=t[ra])
        {
            ra=t[ra];
            nva++;
        }
        int rb=b,nvb=0;
        while(rb!=t[rb])
        {
            rb=t[rb];
            nvb++;
        }
        //cout<<nva<<" "<<nvb<<endl;
        if(nva<nvb)
        {
            swap(a,b);
            swap(nva,nvb);
        }
        while(nva>nvb)
        {
            s=max(s,c[a]);
            a=t[a];
            nva--;
        }

        while(a!=b)
        {
            s=max(s,max(c[a],c[b]));
            a=t[a];
            b=t[b];
        }
        g<<s<<'\n'<<'\n';
    }
    return 0;
}