Cod sursa(job #1691522)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 18 aprilie 2016 17:02:17
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

vector< pair<int,int> > graf[30005];
queue<int> coada;
int n,m,X,Y;
long long costuri[30005];
bool vizitat[30005];

void BFS(int s)
{
    int x;
    while(!coada.empty())
    {
        x=coada.front();
        coada.pop();
        for(int i=0;i<graf[x].size();i++)
        {
            if(!vizitat[graf[x][i].first])
            {
                if(graf[x][i].first>x)
                {
                    vizitat[graf[x][i].first]=1;
                    costuri[graf[x][i].first]=costuri[x]+graf[x][i].second;
                    coada.push(graf[x][i].first);
                }else if(graf[x][i].first<x){
                    vizitat[graf[x][i].first]=1;
                    costuri[graf[x][i].first]=costuri[x]-graf[x][i].second;
                    coada.push(graf[x][i].first);
                }
            }
        }
    }
}

int main()
{
    int i,j,a,b,d;
    in>>n>>m>>X>>Y;
    for(i=1;i<=m;i++)
    {
        in>>a>>b>>d;
        graf[a].push_back(make_pair(b,d));
        graf[b].push_back(make_pair(a,d));
    }
    costuri[X]=0;
    vizitat[X]=1;
    coada.push(X);
    BFS(X);
    out<<costuri[Y];
    return 0;
}