Cod sursa(job #3279130)

Utilizator Crimz0n25Stefan Tanas Crimz0n25 Data 21 februarie 2025 21:53:56
Problema Radiatie Scor 30
Compilator cpp-64 Status done
Runda lasm_21_02_2025_clasa11 Marime 1.37 kb
#include<bits/stdc++.h>
using namespace std;

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

const int MAX_NUM=15100;

int n,m,k,parent[MAX_NUM];
pair<int,pair<int,int>> cost[MAX_NUM];
pair<int,int> queries[MAX_NUM];
int answer[MAX_NUM];

int find(int i)
{
    if(parent[i]!=i)
        parent[i]=find(parent[i]);
    return parent[i];
}

void unify(int i,int j)
{
    if(rand()&1)
        parent[find(j)]=find(i);
    else
        parent[find(i)]=find(j);
}

int main()
{
    in>>n>>m>>k;
    for(int i=0;i<m;i++)
    {
        int a,b,c;
        in>>a>>b>>c;
        cost[i]={c,{a,b}};
    }
    sort(cost,cost+m);
    for(int i=1;i<=n;i++)
        parent[i]=i;
    for(int i=0;i<k;i++)
        in>>queries[i].first>>queries[i].second;
    
    for(int i=0;i<m;i++)
    {
        int x=cost[i].second.first,y=cost[i].second.second,c=cost[i].first;
        int findX=find(x),findY=find(y);
        if(findX!=findY)
        {
            for(int j=0;j<k;j++)
            {
                int x1=queries[j].first,y1=queries[j].second;
                int findX1=find(x1),findY1=find(y1);
                if((findX1==findX&&findY1==findY)||(findX1==findY&&findY1==findX))
                    answer[j]=c;
            }
            unify(x,y);
        }
    }
    for(int i=0;i<k;i++)
        out<<answer[i]<<"\n";
    return 0;
}