Pagini recente » Cod sursa (job #3163706) | Otilia | Istoria paginii summer-challenge-2007/runda-3 | Statisticile problemei Armate | Cod sursa (job #7514)
Cod sursa(job #7514)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define MaxM 31000
#define pow(x) (1<<(x))
using namespace std;
int n, m, nr;
int x[MaxM], y[MaxM], c[MaxM];
char ok[16000];
vector <int> vec[16000], cost[16000];
int bun(int x, int y, int cmax)
{
memset(ok, 1, n);
int i, j=0, k, nr=1;
c[0]=x;
ok[x]=0;
while (j<nr && ok[y]){
k=c[j], j++;
int gr=vec[k].size();
for (i=0; i<gr; i++)
if (ok[vec[k][i]]>0 && cost[k][i]<=cmax){
int v=vec[k][i];
ok[v]=0;
c[nr++]=v;
}
}
return (ok[y]==0);
}
int main()
{
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
int i,j,k;
scanf("%d %d %d", &n, &m, &nr);
for (i=0; i<m; i++){
scanf("%d %d %d", x+i, y+i, c+i);
x[i]--; y[i]--;
vec[x[i]].push_back(y[i]); cost[x[i]].push_back(c[i]);
vec[y[i]].push_back(x[i]); cost[y[i]].push_back(c[i]);
}
for (i=0; i<nr; ++i){
int st, fn, sol=1<<30;
scanf("%d %d", &st, &fn);
st--; fn--;
for (int p=30; p>=0; p--)
if (bun(st, fn, sol-pow(p))) sol-=pow(p);
printf("%d\n", sol);
}
return 0;
}