Cod sursa(job #2431818)

Utilizator rd211Dinucu David rd211 Data 20 iunie 2019 20:27:25
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.32 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
//First destinatie second distanta
vector<pair<int,int>> graf[30005];
void addMuchie(int start,int ender,int d)
{
    graf[start].push_back({ender,d});
    graf[ender].push_back({start,d});
}
int n,m,x,y;
int distanta[30005];
int calculateDistance(int start,int ender)
{
    if(start<graf[start][ender].first)
    {
        return distanta[start]+graf[start][ender].second;
    }
    return distanta[start]-graf[start][ender].second;
}
queue<int> cue;
int bfs()
{
    cue.push(x);
    while(cue.size())
    {
        int frontC = cue.front();
        for(int i = 0;i<graf[frontC].size();i++)
        {
            int vdistanta = calculateDistance(frontC,i);
            if(distanta[graf[frontC][i].first]==0)
            {
                distanta[graf[frontC][i].first]=vdistanta;
                cue.push(graf[frontC][i].first);
                if(distanta[y]!=0)
                    return distanta[y];
            }
        }
        cue.pop();
    }
    return distanta[y];
}
int main()
{
    int temp1,temp2,temp3;
    fin>>n>>m>>x>>y;
    if(x>y)
        swap(x,y);
    while(m--)
        fin>>temp1>>temp2>>temp3,addMuchie(temp1,temp2,temp3);
    fout<<bfs();
    return 0;
}