Cod sursa(job #1640173)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 8 martie 2016 16:14:58
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>

using namespace std;

#define pi pair < int, int >

const int N = 250100;
const int KMAX = 1005;
const int BSIZE = 1 << 10;

int n, m;
vector < pi > adj[N];
vector < int > nod_dist[KMAX];
int dmin[N];
char buff[BSIZE];

int parse(int &i) {
    int v = 0;
    while(isdigit(buff[i])) {
        v = v * 10 + buff[i] - '0';
        i++;
    }
    return v;
}

void dijkstra_small(int x, int y) {
    int i, d, nod;

    for(i = 1; i <= n; i++) dmin[i] = 0x3fffffff;
    dmin[x] = 0;
    nod_dist[0].push_back(x);
    for(i = 0; i < KMAX; i++) {
        for(auto j : nod_dist[i]) {
            if(dmin[j] < i) continue;
            for(auto k : adj[j]) {
                d = max(i, k.second);
                nod = k.first;
                if(dmin[nod] <= d) continue;
                dmin[nod] = d;
                nod_dist[d].push_back(nod);
            }
        }
    }
}

int main() {
    freopen("pscnv.in", "r", stdin);
    freopen("pscnv.out", "w", stdout);

    int x, y, i, j, a, b, c;

    scanf("%d %d %d %d\n", &n, &m, &x, &y);
    for(i = 1; i <= m; i++) {
        gets(buff);
        a = parse(j = 0);
        b = parse(++j);
        c = parse(++j);
        adj[a].push_back(make_pair(b, c));
    }

    dijkstra_small(x, y);
    printf("%d\n", dmin[y]);
    return 0;
}