Pagini recente » Cod sursa (job #1310727) | Cod sursa (job #1615413) | Cod sursa (job #1868462) | Cod sursa (job #594354) | Cod sursa (job #688563)
Cod sursa(job #688563)
#include <fstream>
#include <algorithm>
#define NMAx 15100
#define MMAx 30100
using namespace std;
int X[MMAx],Y[MMAx],C[MMAx],v[MMAx];
int Q,n,m,Gr[NMAx],Cost[NMAx],T[NMAx],viz[NMAx];
bool cmp(int a,int b) {
return C[a]<C[b];
}
int tata(int nod) {
for(;nod!=T[nod];nod=T[nod]);
return nod;
}
void unite(int x,int y,int c) {
if(Gr[x]<Gr[y]) {
T[x]=y;
Cost[x]=c;
}
else {
T[y]=x;
Cost[y]=c;
}
if(Gr[x]==Gr[y])
Gr[x]++;
}
void Kruskal() {
int i,a,b;
sort(v,v+m+1,cmp);
for(i=1;i<=m;i++) {
a=tata(X[v[i]]);
b=tata(Y[v[i]]);
if(a!=b)
unite(a,b,C[v[i]]);
}
}
int LCA(int x,int y,int color) {
for(;x!=T[x];x=T[x])
viz[x]=color;
for(;y!=T[y]&&viz[y]!=color;y=T[y]);
return y;
}
int Query(int x,int y,int color) {
int e,w=LCA(x,y,color);
for(e=0;x!=w;x=T[x])
e=max(e,Cost[x]);
for(;y!=w;y=T[y])
e=max(e,Cost[y]);
return e;
}
int main() {
int i,x,y;
ifstream in("radiatie.in");
ofstream out("radiatie.out");
in>>n>>m>>Q;
for(i=1;i<=m;i++) {
in>>X[i]>>Y[i]>>C[i];
v[i]=i;
}
for(i=1;i<=n;i++) {
T[i]=i;
Gr[i]=1;
}
Kruskal();
for(i=1;i<=Q;i++) {
in>>x>>y;
out<<Query(x,y,i)<<'\n';
}
in.close();
out.close();
return 0;
}