Pagini recente » Cod sursa (job #2127838) | Cod sursa (job #1927738) | Cod sursa (job #2864858) | Cod sursa (job #1296873) | Cod sursa (job #984020)
Cod sursa(job #984020)
#include <fstream>
#include <vector>
#include <algorithm>
#define MAXM 30005
#define MAXN 15005
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct muchie{
int nod1,nod2,cost;};
int n,m,k,tata[MAXN],a,b,aux,grad[MAXN],cst[MAXN],mx,lvl[MAXN];
muchie muchii[MAXM];
vector<int> G[MAXN];
bool Comp(muchie a,muchie b){
return a.cost<b.cost;}
void DFS(int p);
int main()
{
int i;
f>>n>>m>>k;
for(i=1;i<=m;i++)
f>>muchii[i].nod1>>muchii[i].nod2>>muchii[i].cost;
sort(muchii+1,muchii+m+1,Comp);
for(i=1;i<=m;i++){
a=muchii[i].nod1;
b=muchii[i].nod2;
while(tata[a])
a=tata[a];
while(tata[b])
b=tata[b];
if(a==b)
continue;
if(grad[a]>grad[b]){
aux=a;
a=b;
b=aux;}
grad[b]+=grad[a]+1;
tata[a]=b;
cst[a]=muchii[i].cost;
G[b].push_back(a);}
for(i=1;i<=n;i++)
if(!tata[i])
DFS(i);
for(i=1;i<=k;i++){
f>>a>>b;
mx=0;
while(lvl[a]>lvl[b]){
if(cst[a]>mx)
mx=cst[a];
a=tata[a];}
while(lvl[b]>lvl[a]){
if(cst[b]>mx)
mx=cst[b];
b=tata[b];}
while(a!=b){
if(cst[a]>mx)
mx=cst[a];
if(cst[b]>mx)
mx=cst[b];
a=tata[a];
b=tata[b];}
g<<mx<<'\n';}
f.close();
g.close();
return 0;
}
void DFS(int p){
int i;
for(i=0;i<G[p].size();i++){
lvl[G[p][i]]=lvl[p]+1;
DFS(G[p][i]);}}