Pagini recente » Cod sursa (job #2432398) | Cod sursa (job #739313) | Cod sursa (job #2911197) | Cod sursa (job #263421) | Cod sursa (job #8119)
Cod sursa(job #8119)
#include <stdio.h>
//#include <conio.h>
#include <search.h>
#define max_n 15000
#define max_m 30000
#define max_k 15000
/*
#define max_n 1000
#define max_m 1000
#define max_k 1000
/**/
#define min(a,b) a < b ? a : b
#define max(a,b) a > b ? a : b
void readln()
{
// getch();
}
void clear()
{
// clrscr();
}
struct node
{
node * next;
int d; // destination
unsigned long l; // length
node(int dest, int len, node * next = NULL) : d(dest), l(len), next(next) {}
void setnext(node * nod) { next = nod; }
} *a[max_n+1];
int b[max_k+1][3];
unsigned long q[max_n+2], nq;
int v[max_n+1];
unsigned long rez[max_k+1];
int sort_function( const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
clear();
FILE *fin = fopen("radiatie.in", "r");
freopen("radiatie.out", "w",stdout);
int n,m,k;
int i,j,l;
fscanf(fin, "%d %d %d", &n, &m, &k);
for (i = 0; i < m; i++)
{
int x,y,z;
fscanf(fin, "%d %d %d", &x, &y, &z);
a[x-1] = new node(y-1,z,a[x-1]);
a[y-1] = new node(x-1,z,a[y-1]);
}
for (i = 0; i < k; i++)
{
int x,y;
fscanf(fin, "%d %d", &x, &y);
b[i][0] = x-1;
b[i][1] = y-1;
b[i][2] = i;
}
// qsort((void*)b, k, sizeof(b[0]), sort_function);
int cur = -1;
q[n] = 16000;
for (i = 0; i < k; i++)
{
if (b[i][0] != cur)
{
cur = b[i][0];
for (j = 0; j < n; j++)
{
q[j] = 16000;
v[j] = 0;
}
nq = 0;
v[cur] = 1;
for (node *nod = a[cur]; nod != NULL; nod = nod->next)
{
q[nod->d] = nod->l;
nq++;
}
while(nq != 0)
{
int next = cur;
for (j = 0; j < n; j++)
if (!v[j] && q[j] < q[next]) next = j;
for (node *nod = a[next]; nod != NULL; nod = nod->next)
{
if (nod->d == cur) continue;
int d = max(q[next], nod->l);
if (q[nod->d] == 16000) { q[nod->d] = d; nq++; }
else if (d < q[nod->d]) q[nod->d] = d;
}
nq--;
v[next] = 1;
}
}
rez[b[i][2]] = q[b[i][1]];
}
for (i = 0; i < k; i++)
printf("%d\n", rez[i]);
readln();
return 0;
}