Cod sursa(job #3313942)

Utilizator PetruApostolApostol Mihnea Petru PetruApostol Data 7 octombrie 2025 13:43:38
Problema Radiatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

pair<int,pair<int,int>> v[30001];
int n,m,k,tata[15001],adan[15001],c[15001];
vector<int> v1[15001];

int find_tata(int a){
	while(tata[a]) a=tata[a];
	return a;
}
void dfs(int nod){
	for(auto it:v1[nod]){
		adan[it]=adan[nod]+1;
		dfs(it);
	}
}

int main()
{
    int i,a,b,tata1,tata2,max1;
    cin>>n>>m>>k;
    for(i=1;i<=m;i++){
        cin>>v[i].second.first>>v[i].second.second>>v[i].first;
    }
    sort(v+1,v+m+1);
    for(i=1;i<=m;i++){///printf("%d %d| %d %d\n",v[i].second.first,tata[v[i].second.first],v[i].second.second,tata[v[i].second.second]);
		tata1=find_tata(v[i].second.first);
		tata2=find_tata(v[i].second.second);
		if(tata1!=tata2){
			tata[tata1]=tata2;
			v1[tata2].push_back(tata1);
			c[tata1]=v[i].first;
		}
	}
	for(i=1;tata[i];i++);
	dfs(i);
	while(k){k--;
		cin>>a>>b;
		max1=0;
		if(adan[a]<adan[b]) swap(a,b);
		while(adan[a]>adan[b]){
			max1=max(max1,c[a]);
			a=tata[a];
		}
		while(a!=b){
			max1=max(max1,max(c[a],c[b]));
			a=tata[a];
			b=tata[b];
		}
		cout<<max1<<"\n";
	}
    return 0;
}