Cod sursa(job #2854190)

Utilizator RobertDincaDinca Robert RobertDinca Data 20 februarie 2022 23:51:42
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include<fstream>
#include<vector>
#include<queue>
#include<utility>

using namespace std ;

vector<pair<int,int>> graf[30005];

pair<int,int> parinti[30005];

int n,m,x,y;

void calcLevel()
{
    int vizitate[30005] ;
    fill(vizitate+0, vizitate+n+5, -1);
    queue<int> q ;

    vizitate[x] = 0 ;
    q.push(x) ;

    while(q.size() > 0 )
        {
            int currentNode= q.front();

            for(unsigned int j = 0 ; j < graf[currentNode].size(); j++)
                {

                    int nod = graf[currentNode][j].first   ;

                    if(vizitate[nod] == -1)
                        {
                            vizitate[nod] = vizitate[currentNode]+1;
                            parinti[nod]={currentNode, graf[currentNode][j].second};
                            q.push(nod);
                        }
                    if(nod == y)
                        return ;


                }


            q.pop();
        }
}

int main()
{
    ifstream cin("sate.in");
    ofstream cout("sate.out");

    cin >> n >> m >> x >>y ;
    int a, b, d ;
    for(int i = 0 ; i < m  ;i++)
        {
            cin >> a >> b >> d;
            graf[a].push_back({b, d});
            graf[b].push_back({a, d});
        }
    calcLevel() ;

    int sum = 0 ;

    pair<int,int> nod = {y,0};

    while(nod.first != x )
        {
            if(nod.first > parinti[nod.first].first)
                sum += parinti[nod.first].second ;
            else sum -= parinti[nod.first].second;
                nod = parinti[nod.first];
        }
    cout << sum ;
    cin.close(); cout.close();
    return 0 ;
}