Pagini recente » Cod sursa (job #2568726) | Cod sursa (job #1250989) | Cod sursa (job #2405345) | Cod sursa (job #742300) | Cod sursa (job #6997)
Cod sursa(job #6997)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define nmax 15005
#define mmax 30005
#define infinite 2000000000
using namespace std;
int cost[mmax],x[mmax],y[mmax],n,m,k,place[nmax],d[nmax],sx,sy;
int coada[nmax],bagat[nmax];
vector <int> much[nmax];
int cmp(int i,int j) {
return cost[i]>=cost[j] ? 0 : 1;
}
inline int min(int i,int j) {
if(i>j) return j;
else return i;
}
inline int max(int i,int j) {
if(i>j) return i;
else return j;
}
int relaxeaza(int u,int v,int c) {
if(d[u]!=infinite)
d[v]=min(d[v],max(d[u],c));
if(d[v]!=infinite)
d[u]=min(d[u],max(d[v],c));
}
int drum(int i,int j) {
coada[0]=1;
coada[1]=i;
for(int k=1;k<=n;k++) {
d[k]=infinite;
bagat[k]=0;
}
d[i]=0;
bagat[i]=1;
while(coada[0]>0) {
int nod=coada[coada[0]];
coada[0]--;
for(int i=0;i<much[nod].size();i++) {
int n1=x[much[nod][i]];
int n2=y[much[nod][i]];
int c=cost[much[nod][i]];
if(n1!=nod) n1^=n2^=n1^=n2;
if(d[n2]>max(d[n1],c)) {
d[n2]=max(d[n1],c);
if(!bagat[n2]) {
coada[++coada[0]]=n2;
bagat[n2]=1;
}
}
}
bagat[nod]=0;
}
return d[j];
}
int main() {
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d %d %d\n",&n,&m,&k);
for(int i=1;i<=m;i++) {
scanf("%d %d %d\n",&x[i],&y[i],&cost[i]);
place[i]=i;
}
sort(place+1,place+m+1,cmp);
for(int i=1;i<=m;i++) {
much[x[place[i]]].push_back(place[i]);
much[y[place[i]]].push_back(place[i]);
}
for(int i=1;i<=k;i++) {
scanf("%d %d\n",&sx,&sy);
printf("%d\n",drum(sx,sy));
}
return 0;
}