Cod sursa(job #2990879)

Utilizator AndreiStreheStreche Andrei Claudiu AndreiStrehe Data 8 martie 2023 18:34:23
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

#define infinite 100000000
#define nmax 30005

int d[nmax];
int i,j,k1,k2,k3,vecin,cost,nodcurent,n,m,x,y;

vector < pair <int, int> > a[nmax];
queue <int> coada;

void bfs()
{
    while(coada.empty()==0)
    {
        nodcurent=coada.front(); coada.pop();

        for(i=0;i<a[nodcurent].size();i++)
        {
            vecin=a[nodcurent][i].first;
            cost=a[nodcurent][i].second;
            if(d[nodcurent]+cost<d[vecin] && vecin>nodcurent)
            {
                if(d[vecin]==infinite)
                    coada.push(vecin);
                d[vecin]=d[nodcurent]+cost;
            }
            else if (vecin<nodcurent && d[vecin]>d[nodcurent]-cost)
            {
                if(d[vecin]==infinite)
                    coada.push(vecin);
                d[vecin]=d[nodcurent]-cost;
            }
        }

    }
}

int main()
{
    f>>n>>m>>x>>y;

    for(i=1;i<=m;i++)
    {
        f>>k1>>k2>>k3;

        a[k1].push_back(make_pair(k2,k3));
        a[k2].push_back(make_pair(k1,k3));
    }

    for(i=1;i<=n;i++)
        d[i]=infinite;

    d[x]=0; coada.push(x);

    bfs();
    g<<d[y];

    return 0;
}