Cod sursa(job #1836487)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 28 decembrie 2016 13:54:17
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;
vector < pair<int, int> > L[30001];
int d[30001], c[30001];
pair<int, int> aux;
bitset<30001> v;
int x, y, n, m, a, b, dd;
int main()
{
    FILE *fin=fopen ("sate.in","r");
    FILE *fout=fopen ("sate.out","w");
    fscanf (fin,"%d%d%d%d",&n,&m,&x,&y);
    if (x > y) {
        int ax = x;
        x = y;
        y = ax;
    }
    for (int i=1;i<=m;i++){
        fscanf (fin,"%d%d%d",&a,&b,&dd);
        // aux.first = b; aux.secod = d; L[a].push_back(aux);
        L[a].push_back( make_pair(b, dd) );
        L[b].push_back(make_pair(a, -dd));
    }
    int p = 1;
    int u = 1;
    c[1] = x;
    v[x] = 1;
    d[x] = 0;
    while (p <= u) {
        int nod = c[p];
        // caut vecinbii nevizitati ai lui nod
        for (int i=0;i<L[nod].size(); i++) {
            int vecin = L[nod][i].first;
            int dist = L[nod][i].second;
            if (v[vecin] == 0) {
                u++;
                c[u] = vecin;
                v[vecin] = 1;
                d[vecin] = d[nod] + dist;
                if (vecin == y) {
                    fprintf(fout, "%d", d[vecin]);
                    return 0;
                }
            }
        }
        p++;
    }

    return 0;
}