Pagini recente » Cod sursa (job #2661475) | Cod sursa (job #1146800) | Cod sursa (job #211883) | Cod sursa (job #1354481) | Cod sursa (job #3195029)
#include <fstream>
#include <algorithm>
#include <vector>
#define NMAX 15001
#define MMAX 30001
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n,m,k,nr,x,y,maxi,t[NMAX],t1[NMAX],niv[NMAX],c[NMAX];
struct muchie {
int x,y,c;
}v[MMAX];
vector<pair<int,int>> l[NMAX];
bool cmp(muchie a,muchie b) {
return a.c<b.c;
}
int root(int x) {
while (t[x]>0)
x=t[x];
return x;
}
void dfs(int nod,int tata) {
t1[nod]=tata;
niv[nod]=niv[tata]+1;
for (int i=0;i<l[nod].size();i++) {
int vec=l[nod][i].first;
int cost=l[nod][i].second;
if (vec!=tata) {
c[vec]=cost;
dfs(vec,nod);
}
}
}
int main() {
fin>>n>>m>>k;
for (int i=1;i<=m;i++)
fin>>v[i].x>>v[i].y>>v[i].c;
sort(v+1,v+m+1,cmp);
for (int i=1;i<=n;i++)
t[i]=-1;
int i=1;
while (nr<n-1) {
int rx=root(v[i].x);
int ry=root(v[i].y);
if (rx!=ry) {
nr++;
l[rx].push_back({ry,v[i].c});
l[ry].push_back({rx,v[i].c});
if (-t[rx]>-t[ry]) {
t[rx]+=t[ry];
t[ry]=rx;
}
else {
t[ry]+=t[rx];
t[rx]=ry;
}
}
i++;
}
dfs(1,0);
while (k--) {
fin>>x>>y;
maxi=0;
while (niv[x]>niv[y]) {
maxi=max(maxi,c[x]);
x=t1[x];
}
while (niv[y]>niv[x]) {
maxi=max(maxi,c[y]);
y=t1[y];
}
while (x!=y) {
maxi=max(maxi,max(c[x],c[y]));
x=t1[x];
y=t1[y];
}
fout<<maxi<<"\n";
}
return 0;
}