Cod sursa(job #1913413)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 8 martie 2017 12:49:30
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

vector<int> ls[30005], lc[30005];
queue <int> q;
int n, m, x, y, i, j, c, l, inc, fin;
bool incoada[30005];
int d[30005];

int main() {
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d %d %d %d\n", &n,&m,&inc,&fin);
    for (i = 1; i <= n; i++)
        d[i] = 20000005;
    if (inc>fin) swap(inc,fin);
    for (i = 1; i <= m; i++) {
        scanf("%d %d %d\n", &x,&y,&c);
        ls[x].push_back(y);
        lc[x].push_back(c);
        ls[y].push_back(x);
        lc[y].push_back(-c);
    }
    q.push(inc);
    incoada[inc] = 0;
    d[inc] = 0;
    while (q.empty()  == 0) {
        x = q.front();
        q.pop();
        incoada[x] = 0;

        l = ls[x].size();
        for (i = 0; i < l; i++) {
            y = ls[x][i];
            c = lc[x][i];
            if (d[x] + c < d[y]) {
                d[y] = d[x]+c;
                if (incoada[y])
                    continue;
                incoada[y] = 1;
                q.push(y);
            }

        }
    }
    printf("%d",d[fin]);
}