Pagini recente » Cod sursa (job #1503227) | Cod sursa (job #3248827) | Cod sursa (job #2987655) | Cod sursa (job #1038572) | Cod sursa (job #2960832)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("radiatie.in");
ofstream out("radiatie.out");
int n,m,k;
int rang[30001];
struct father
{
int tataa;
int muchie;
};
father tata[30001];
struct elem
{
int st;
int dr;
int price;
};
elem v[30005];
bool cmp(elem x,elem y)
{
return x.price<y.price;
}
int find1(int x)
{
int reprez=x;
int maxi=0;
while(tata[reprez].tataa!=reprez)
{
reprez=tata[reprez].tataa;
}
int baza=x;
while(tata[x].tataa!=x)
{
int cpt=tata[x].tataa;
if(maxi<tata[x].muchie)
maxi=tata[x].muchie;
tata[x].tataa=reprez;
x=cpt;
}
tata[baza].muchie=maxi;
return reprez;
}
void union1(int reprez1,int reprez2,int price)
{
if(rang[reprez1]==rang[reprez2])
{
tata[reprez2].tataa=reprez1;
rang[reprez1]++;
tata[reprez2].muchie=price;
}
else if(rang[reprez1]<rang[reprez2])
{
tata[reprez1].tataa=reprez2;
tata[reprez1].muchie=price;
}
else if(rang[reprez1]>rang[reprez2])
{
tata[reprez2].tataa=reprez1;
tata[reprez2].muchie=price;
}
}
int main()
{
in>>n>>m>>k;
int reprezfinal;
for(int i=1;i<=n;i++)
{
tata[i].muchie=0;
tata[i].tataa=i;
rang[i]=1;
}
for(int i=1;i<=m;i++)
in>>v[i].st>>v[i].dr>>v[i].price;
sort(v+1,v+m+1,cmp);
for(int i=1;i<=m;i++)
{
if(find1(v[i].st)!=find1(v[i].dr))
{
int nr1=find1(v[i].st);
int nr2=find1(v[i].dr);
union1(nr1,nr2,v[i].price);
}
}
for(int i=1;i<=n;i++)
reprezfinal=find1(i);
for(int i=1;i<=k;i++)
{
int x,y;
in>>x>>y;
out<<max(tata[x].muchie,tata[y].muchie)<<'\n';
}
return 0;
}