Cod sursa(job #2854175)

Utilizator RobertDincaDinca Robert RobertDinca Data 20 februarie 2022 23:36:05
Problema Sate Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<fstream>
#include<vector>
#include<queue>

using namespace std ;

vector<vector<pair<int,int>>> graf(30000,vector<pair<int,int>>());

pair<int,int> parinti[30000];

int n,m,x,y;

void calcLevel()
{
    int vizitate[n+1] ;
    for(int i = 0 ; i <=n ; i++)vizitate[i] = -1 ;
    queue<int> q ;

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

    while(!q.empty())
        {
            for(int j = 0 ; j < graf[q.front()].size(); j++)
                {

                    int nod = graf[q.front()][j].first   ;

                    if(vizitate[nod] == -1)
                        {
                            vizitate[nod] = vizitate[q.front()]+1;
                            parinti[nod]={q.front(), graf[q.front()][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 ;
}