Cod sursa(job #1150819)

Utilizator andreiiiiPopa Andrei andreiiii Data 23 martie 2014 16:14:59
Problema PScNv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#define PII pair<int, int>
#define x first
#define y second
#define mp make_pair

using namespace std;

const int N=250005, M=1001, INF=0x3f3f3f3f;

vector <PII> G[N];
vector <int> C[M];
int dist[N];
int n, start, finish;

void Solve()
{
    int i, x;
    memset(dist, INF, sizeof(dist));
    dist[start]=0;
    C[0].push_back(start);
    for(i=0;i<M;i++)
    {
        for(size_t j=0;j<C[i].size();j++)
        {
            x=C[i][j];
            if(dist[x]!=i) continue;
            if(x==finish)
            {
                printf("%d\n", dist[x]);
                return;
            }
            for(auto p: G[x])
            {
                if(max(i, p.y)<dist[p.x])
                {
                    dist[p.x]=max(i, p.y);
                    C[max(i, p.y)].push_back(p.x);
                }
            }
        }
        C[i].clear();
    }
}

int main()
{
    freopen("pscnv.in", "r", stdin);
    freopen("pscnv.out", "w", stdout);
    int m, x, y, z;
    scanf("%d%d%d%d", &n, &m, &start, &finish);
    while(m--)
    {
        scanf("%d%d%d", &x, &y, &z);
        G[x].push_back(mp(y, z));
    }
    Solve();
}