Cod sursa(job #3277144)

Utilizator puica2018Puica Andrei puica2018 Data 15 februarie 2025 12:50:28
Problema Radiatie Scor 100
Compilator cpp-64 Status done
Runda vs11_12_vine_oji_2025 Marime 1.49 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,k;
int a[30005],b[30005],len[30005];
int u[15005],v[15005];
int ans[15005];


vector <int> h1[15005];
vector <int> h2[15005];


int r[15005];

int root(int x)
{
    if(r[x]!=x)
        r[x]=root(r[x]);
    return r[x];
}


int ord[30005];

bool cmp(int i,int j)
{
    return (len[i]<len[j]);
}

int main()
{
    fin>>n>>m>>k;
    for(int i=1; i<=m; i++)
        fin>>a[i]>>b[i]>>len[i];
    for(int i=1; i<=k; i++)
    {
        fin>>u[i]>>v[i];
        h2[u[i]].push_back(i);
        h2[v[i]].push_back(i);
    }

    for(int i=1; i<=n; i++)
    {
        r[i]=i;
        h1[i]={i};
    }

    for(int i=1; i<=m; i++)
        ord[i]=i;
    sort(ord+1,ord+m+1,cmp);

    for(int j=1; j<=m; j++)
    {
        int i=ord[j];

        int ra=root(a[i]);
        int rb=root(b[i]);

        if(ra!=rb)
        {
            if(h1[ra].size()>h1[rb].size())
                swap(ra,rb);

            for(int x:h1[ra])
            {
                for(int ind:h2[x])
                {
                    int y=u[ind]+v[ind]-x;

                    if(root(y)==rb)
                        ans[ind]=len[i];
                }

                h1[rb].push_back(x);
            }

            r[ra]=rb;

            h1[ra].clear();
        }
    }

    for(int i=1; i<=k; i++)
        fout<<ans[i]<<"\n";

    return 0;
}