Cod sursa(job #2872364)

Utilizator raul41917raul rotar raul41917 Data 16 martie 2022 21:13:41
Problema Sate Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
int n,m;
int p,q;
vector <pair<int,long long> >V[30005];
int viz[30005];
void DFS(int frontNode,int curentNode,int finalNode,long long D,long long &sol)
{
    if(curentNode==finalNode)
    {
        sol=D;
        return ;
    }else
    {
        for(int i=0;i<V[curentNode].size();i++)
        {
            int vecin=V[curentNode][i].first;
            if(viz[vecin]==0)
            {
                viz[vecin]=1;
                if(curentNode==frontNode)
                    DFS(frontNode,vecin,finalNode,D+V[curentNode][i].second,sol);
                else
                {
                    if(vecin>curentNode)
                        DFS(frontNode,vecin,finalNode,D+V[curentNode][i].second,sol);
                    else
                        DFS(frontNode,vecin,finalNode,abs(D-V[curentNode][i].second),sol);
                }
            }
        }
    }
}
int main()
{
    fi>>n>>m>>p>>q;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        long long D;
        fi>>x>>y>>D;
        V[x].push_back(make_pair(y,D));
        V[y].push_back(make_pair(x,D));
    }
    viz[p]=1;
    long long sol=0;
    DFS(p,p,q,0,sol);
    fo<<sol;
    return 0;
}