Cod sursa(job #2724123)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 16 martie 2021 15:49:38
Problema Radiatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define ll long long
#define ull unsigned long long
#define x first
#define y second
#define pi pair<int,int>
#define pl pair<ll,ll>

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

const ll N=15005,INF=1e18,MOD=666013,M=1e2+5,inf=INT_MAX;

struct str
{
    int a,b,cost;
};
struct str2
{
    int first,second;
};

int n,m,k;
int par[N],siz[N],dp[N];
vector<str> edges;
set<int> s[N];
set<int> :: iterator it;

bool cmp(str a,str b)
{
    return a.cost<b.cost;
}

int parent(int nod)
{
    while(nod!=par[nod])nod=par[nod];
    return nod;
}
void dsu(int a,int b,int cost)
{
    a=parent(a);
    b=parent(b);
    if(siz[a]<siz[b])swap(a,b);
    par[b]=a;
    siz[a]+=siz[b];
    if(!dp[a])dp[a]=cost;
    if(!dp[b])dp[b]=cost;
}

void apm()
{
    sort(edges.begin(),edges.end(),cmp);
    for(int i=1;i<=n;i++)
    {
        siz[i]=1;
        par[i]=i;
    }
    for(int i=0;i<edges.size();i++)
    {
        int a=edges[i].a,b=edges[i].b,cost=edges[i].cost;
        if(parent(a)!=parent(b))
        {
            dsu(a,b,cost);
        }
    }
}
int main()
{
    fin>>n>>m>>k;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        fin>>a>>b>>c;
        edges.pb({a,b,c});
    }
    apm();
    for(int i=1;i<=k;i++)
    {
        int a,b;
        fin>>a>>b;
        int ans=0;
        while(a!=b)
        {
            ans=max(ans,max(dp[a],dp[b]));
            a=par[a];
            b=par[b];
        }
        fout<<ans<<'\n';
    }

}