Cod sursa(job #2712717)

Utilizator raul41917raul rotar raul41917 Data 26 februarie 2021 13:36:29
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
int N,M;
int X,Y;
vector <pair <int,int> > vec[30005];
int parcurs[30001];
void DFS(int parent ,int v_curent,int value)
{
    for(int j=0;j<=vec[v_curent].size()-1;j++)
    {
        if(vec[v_curent][j].first!=parent && parcurs[vec[v_curent][j].first]==0)
        {
            parcurs[vec[v_curent][j].first]=1;
            if(vec[v_curent][j].first<v_curent)
                {
                    vec[1].push_back(make_pair(vec[v_curent][j].first,abs(vec[v_curent][j].second-value)));
                    DFS(v_curent,vec[v_curent][j].first,abs(vec[v_curent][j].second-value));
                }
            else
                {
                    vec[1].push_back(make_pair(vec[v_curent][j].first,value+vec[v_curent][j].second));
                    DFS(v_curent,vec[v_curent][j].first,value+vec[v_curent][j].second);
                }
        }
    }
}
void rezolvare(int parent)
{
    for(int i=0;i<=vec[parent].size()-1;i++)
    {
        if(parcurs[vec[parent][i].first]==0)
        {
            parcurs[vec[parent][i].first]=1;
            DFS(parent,vec[parent][i].first,vec[parent][i].second);
        }
    }
}
int main()
{
    fi>>N>>M;
    fi>>X>>Y;
    int x,y,D;
    for(int i=1;i<=M;i++)
    {
        fi>>x>>y>>D;
        vec[x].push_back(make_pair(y,D));
        vec[y].push_back(make_pair(x,D));
    }
    parcurs[X]=1;
    rezolvare(X);
    for(int i=0;i<=vec[X].size()-1;i++)
    {
        if(vec[X][i].first==Y)
        {
            fo<<vec[X][i].second;
            break;
        }
    }
    return 0;
}