Cod sursa(job #3372919)

Utilizator tonealexandruTone Alexandru tonealexandru Data 5 noiembrie 2026 15:22:24
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.49 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 30005;

vector<pair<int, int>> adj[NMAX];
queue<int> q;

int save[NMAX];

int main()
{
    ifstream cin("sate.in");
    ofstream cout("sate.out");
    int n, m, x, y, a, b, d;
    cin>>n>>m>>x>>y;

    for(int i=1; i<=n; i++)
        save[i] = 21e8;

    for(int i=0; i<m; i++)
    {
        cin>>a>>b>>d;
        adj[a].push_back({b, d});
        adj[b].push_back({a, d});
        //cout<<"OK"<<'\n';
    }

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

    int prev;
    while(!q.empty())
    {
        int cur = q.front(); q.pop();
        for(auto x : adj[cur])
        {
            int nextt = x.first, cost = x.second;

            if(nextt == prev)
                continue;

            if(nextt > cur)
            {
                //cout<<" "<<nextt<<" "<<cur<<" "<<save[cur]<<'\n';
                if(save[nextt] > save[cur] + cost)
                {
                    save[nextt] = save[cur] + cost;
                    prev = cur; q.push(nextt);
                }
            }
            else
            {
                //cout<<" "<<nextt<<" "<<cur<<'\n';
                if(save[nextt] > save[cur] - cost)
                {
                    save[nextt] = save[cur] - cost;
                    prev = cur; q.push(nextt);
                }
            }
        }
    }

    /*for(int i=0; i<n; i++)
        cout<<save[i]<<" ";
    cout<<'\n';*/
    cout<<save[y];


    return 0;
}