Cod sursa(job #1725869)

Utilizator mirupetPetcan Miruna mirupet Data 6 iulie 2016 16:58:14
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
#include<vector>
#include<queue>
#define NMax 30001
#define INF 1000000000
using namespace std;

FILE *fin = freopen("sate.in", "r", stdin);
FILE * fout = freopen("sate.out", "w", stdout);

int N, M, S, F;
int dist[NMax];
vector < pair < int, int > > v[NMax];
queue < pair < int, int > > q;
int main()
    {
        scanf("%d%d%d%d", &N, &M, &S, &F);

        for (int  i = 1, X, Y, D; i <= M; i++)
        {
            scanf("%d%d%d", &X, &Y, &D);
            v[X].push_back(make_pair(Y, D));
            v[Y].push_back(make_pair(X, -D));
        }

        for (int i = 1; i <= N; i++)
            dist[i] = INF;
        q.push(make_pair(S, 0));
        dist[S] = 0;

        vector < pair < int, int > > :: iterator it;

        while (!q.empty())
        {
            int node = q.front().first;
            q.pop();

            for (it = v[node].begin(); it != v[node].end(); it++)
            {
                if (dist[it -> first] > dist[node] + it -> second)
                {
                    dist[it -> first] = dist[node] + it -> second;
                    q.push(make_pair(it -> first, dist[it -> first]));
                }
            }
        }

        //for (int i = 1; i <= N; i++)
            printf("%d\n", dist[F]);
    }