Cod sursa(job #2245475)

Utilizator maria15Maria Dinca maria15 Data 25 septembrie 2018 12:41:08
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.out");

int n, m, X, Y, i, j, t, a, b, d, dist[30003], p, u, c[30003], f[30003], crt, var;
vector<int> v[30003], vec[30003];

int main(){
    fin>>n>>m>>X>>Y;
    for(i=1;i<=m;i++){
        fin>>a>>b>>d;
        v[a].push_back(b);
        vec[a].push_back(d);
        if(b == Y)
            dist[a] = d;
        v[b].push_back(a);
        vec[b].push_back(d);
        if(a == Y)
            dist[b] = d;
    }
    p = u = 1;
    c[1] = X;
    f[X] = 1;
    while(p<=u){
        crt = c[p];
        for(i=0;i<v[crt].size();i++){
            var = v[crt][i];
            if(f[var] == 0){
                f[var] = 1;
                c[++u] = var;
                if(var < X && crt < X)
                    if(var < crt)
                        dist[var] = vec[crt][i] + dist[crt];
                    else
                        dist[var] = -vec[crt][i] + dist[crt];
                else
                    if( var > X && crt > X)
                        if(var > crt)
                            dist[var] = vec[crt][i] + dist[crt];
                        else
                            dist[var] = -vec[crt][i] + dist[crt];
                    else
                        dist[var] = vec[crt][i] - dist[crt];
                if(var == Y){
                    fout<<dist[var];
                    return 0;
                }
            }
        }
        p++;
    }
    return 0;

}
/*
for(i=1;i<=n;i++)
        for(j=0;j<v[i].size()-1;j++){
            crt = v[i][j];
            for(t=j+1;t<v[i].size();t++){
                var = v[i][t];
                if ((crt < i && var < i )|| (crt > i && var > i)){
                    dist = vec[i][t] - vec[i][j];

                }
            }
        }
*/