Cod sursa(job #1119852)

Utilizator felixiPuscasu Felix felixi Data 24 februarie 2014 20:22:41
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int NMAX= 30000;

struct GRAF{
    int vf, cost;
};

vector <GRAF> d[NMAX+1];
queue <GRAF> q;
bool viz[NMAX+1];
int Rasp= 0, gata= 1, X, S, R[NMAX+1];

int main()
{
    int N,M, a,b,c;
    GRAF nr;
    in>>N>>M >> X>>S;
    if( X>S ){
        int ff= X;
        X= S;
        S= ff;
    }

    for(int i=1; i<=M; i++){
        in>>a>>b>>c;
        nr.vf= b;  nr.cost= c;
        d[a].push_back(nr);
        nr.vf= a;
        d[b].push_back(nr);

    }

    nr.vf= X;   nr.cost= 0;
    R[ X ]= 0;
    viz[X]= 1;

    q.push(nr);
    while( !q.empty() ){
        GRAF aux= q.front();
        int lg= (int)d[aux.vf].size();
        for(int i=0; i<lg; i++){
            int x= d[aux.vf][i].vf, xcost= d[aux.vf][i].cost;
            if( viz[x]==0 ){
                if( aux.vf < x ) {
                    R[x]= R[aux.vf] + xcost;
                }
                else R[x]= R[aux.vf] - xcost;
                q.push( d[aux.vf][i] );
                viz[x]= 1;
            }
        }
        q.pop();
    }

    out << R[S] << '\n';

    in.close();
    out.close();

    return 0;
}