Pagini recente » Cod sursa (job #2137702) | Cod sursa (job #1023514) | Cod sursa (job #2955809) | Cod sursa (job #118817) | Cod sursa (job #170842)
Cod sursa(job #170842)
#include <stdio.h>
#include <stdlib.h>
int n, m, sursa, dest, ok, max, min = 1001, ok2;
int *v[250006], *cost[250006];
void citire()
{
freopen("pscnv.in","r",stdin);
freopen("pscnv.out","w",stdout);
int i, a, b, c, j;
char s[50];
scanf("%d %d %d %d\n",&n,&m,&sursa,&dest);
for (i=1;i<=n;++i)
{
v[i] = (int*)realloc(v[i],sizeof(int));
v[i][0] = 0;
cost[i] = (int*)realloc(cost[i],sizeof(int));
cost[i][0] = 0;
}
for (i=1;i<=m;++i)
{
fgets(s,50,stdin);
j = a = b = c = 0;
while (s[j] <= '9' && s[j] >= '0') {a = a * 10 + s[j] - '0'; j++;}
j++;
while (s[j] <= '9' && s[j] >= '0') {b = b * 10 + s[j] - '0'; j++;}
j++;
while (s[j] <= '9' && s[j] >= '0') {c = c * 10 + s[j] - '0'; j++;}
++v[a][0]; v[a] = (int*)realloc(v[a],(v[a][0]+1)*sizeof(int));
v[a][v[a][0]] = b;
++cost[a][0]; cost[a] = (int*)realloc(cost[a],(cost[a][0]+1)*sizeof(int));
cost[a][cost[a][0]] = c;
if (c > max) max = c;
if (c < min) min = c;
}
}
void BF(int d)
{
int p , u, c[250005], i;
p = u = 1;
c[1] = sursa;
while (p <= u)
{
if (ok && ok2) return;
for (i = 1; i <= v[c[p]][0]; i++)
if (cost[c[p]][i] <= d)
{
if (cost[c[p]][i] == d) ok2 = 1;
if (v[c[p]][i] == dest) { ok = 1; return; }
c[++u] = v[c[p]][i];
}
p++;
}
}
int caut()
{
int p = min, u = max, m;
m = (p + u) / 2;
while (p <= u)
{
ok = ok2 = 0;
BF(m);
if (ok)
{
if (ok2) return m;
else u = m - 1;
}
else p = m + 1;
m = (p + u) / 2;
}
return 0;
}
int main()
{
citire();
printf("%d\n",caut());
return 0;
}