Pagini recente » Cod sursa (job #429392) | Cod sursa (job #581978) | Cod sursa (job #796921) | Cod sursa (job #1371193) | Cod sursa (job #1527510)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
int t[15005],i,n,l[15005],m,k,a,b,C[15005],X,Y,rez;
vector <int> G[30005];
struct du{
int x,y,c;}v[30005],d,e;
bool cmp(du d, du e)
{
return d.c<e.c;
}
int root(int k)
{
while(t[k]!=0)
k=t[k];
return k;
}
void dfs(int nod)
{
for(size_t i=0;i<G[nod].size();++i)
{
l[G[nod][i]]=l[nod]+1;
dfs(G[nod][i]);
}}
int main()
{
f>>n>>m>>k;
for(i=1;i<=m;i++){
f>>v[i].x>>v[i].y>>v[i].c;
}
sort(v+1,v+m+1,cmp);
for(i=1;i<=m;i++)
{
a=root(v[i].x);
b=root(v[i].y);
if(a!=b)
{
t[a]=b;
G[b].push_back(a);
C[a]=v[i].c;
}
}
for(i=1;t[i];++i);
dfs(i);
for(i=1;i<=k;i++)
{
f>>X>>Y;
rez=0;
if(l[X]<l[Y])
swap(X,Y);
while(l[X]>l[Y])
{
rez=max(rez,C[X]);
X=t[X];
}
while(X!=Y)
{
rez=max(rez,max(C[X],C[Y]));
X=t[X];
Y=t[Y];
}
g<<rez<<'\n';
}
return 0;
}