Cod sursa(job #3153833)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 1 octombrie 2023 14:54:25
Problema Radiatie Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
//desen -- 30pct (time limit) - f grea sunt multumit cu frimiturile (paduri + coordonate grafic)
#include <bits/stdc++.h>
using namespace std;

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

int i, j, n, m, p, T[450000], Rang[450000], g, c1[35000], c2[35000], maxx;
double total;
 
typedef struct poz{
    double cost;
    int nod1, nod2;  
 }student;
 
 typedef struct poz1{
    int nod1, nod2;  
 }student1;


int Radacina(int k){
    if(T[k] == k)
        return k;
    else
    {
        int r = Radacina(T[k]);
        T[k] = r;
        return r;
    }
}

void Unire(int k, int p)
{
    int rk = Radacina(k), rp = Radacina(p);
    if(rk != rp)
    {
        if(Rang[rk] > Rang[rp])
            T[rp] = rk;
        else
        {
            T[rk] = rp;
            if(Rang[rk] == Rang[rp])
                Rang[rp] ++;
        }
    }
    
}

bool compare(student a, student b){
    if(a.cost<b.cost){
        return 1;
    }else{
        return 0;
    }
}


student v[40004];
student1 K[40004];

int main()
{
    
    fin>>n>>m>>p;
    
    for(i=1;i<=m;i++)
    {
        fin>>v[i].nod1>>v[i].nod2>>v[i].cost;
    }
    
    for(i=1;i<=p;i++)
    {
        fin>>K[i].nod1>>K[i].nod2;
    }
    
    
    
    
    sort(v+1 , v+m+1 , compare);
    
    
    for(i=1;i<=p;i++)
    {
        for(j=1;j<=n;j++)
        {
            T[j]=j;
            Rang[j]=1;
        }
        maxx=0;
        for(j=1;j<=m;j++)
        {
            if(Radacina(v[j].nod1)!=Radacina(v[j].nod2)){
                Unire(v[j].nod1 , v[j].nod2);
                if(v[j].cost>maxx){
                    maxx=v[j].cost;
                }
            }

            if(Radacina(K[i].nod1)==Radacina(K[i].nod2)){
                break;
            }
        }
        
        fout<<maxx<<endl;

        
    }
    
    
    
   
   
    
    
}