Cod sursa(job #3321458)

Utilizator oliv_1Bostinescu Octavian oliv_1 Data 9 noiembrie 2025 15:49:14
Problema Sate Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <bits/stdc++.h>

using namespace std;
struct cez
{
    int val,dist;
}a;
vector<cez>vecini[30005];
int distanta[30005];
int nod;
queue<int>q;
void bfs(int start)
{
    q.push(start);
    while(q.size()>0)
    {
        nod=q.front();
        q.pop();
        for(auto i : vecini[nod])
        {
            if(distanta[i.val]==-1)
            {

                q.push(i.val);
                if(i.val<start&&nod<start)
                {
                    if(i.val<nod)
                        distanta[i.val]=distanta[nod]+i.dist;
                    else
                         distanta[i.val]=distanta[nod]-i.dist;
                }
                else if(i.val<start&&nod>start)
                {
                    distanta[i.val]=i.dist-distanta[nod];
                }
                else if(i.val>start&&nod<start)
                {
                    distanta[i.val]=i.dist-distanta[nod];
                }
                else
                {
                    if(i.val<nod)
                        distanta[i.val]=distanta[nod]-i.dist;
                    else
                         distanta[i.val]=distanta[nod]+i.dist;
                }
            }
        }
    }
}
int main()
{
    ifstream cin("sate.in");
    ofstream cout("sate.out");
    int n,m,start,finish,x,y,d;
    cin>>n>>m>>start>>finish;
    for(int i=1;i<=n;i++)
        distanta[i]=-1;
    distanta[start]=0;
    for(int i=0;i<m;i++)
    {
        cin>>x>>y>>d;
        a.val=y;
        a.dist=d;
        vecini[x].push_back(a);
        a.val=x;
        vecini[y].push_back(a);
    }
    bfs(start);
    cout<<distanta[finish];
    return 0;
}