Cod sursa(job #170841)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 3 aprilie 2008 12:38:11
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.8 kb
#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();#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; }  printf("%d\n",caut()); return 0; }