Mai intai trebuie sa te autentifici.

Cod sursa(job #2431816)

Utilizator rd211Dinucu David rd211 Data 20 iunie 2019 20:19:25
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.35 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
//First destinatie second distanta
vector<pair<unsigned short,int>> graf[30010];
void addMuchie(unsigned short start,unsigned short ender,int d)
{
    graf[start].push_back({ender,d});
    graf[ender].push_back({start,d});
}
int n,m,x,y;
int distanta[30010];
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;
}

int bfs()
{
    queue<unsigned short> cue;
    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;
    for(int i = 1;i<=m;i++)
        fin>>temp1>>temp2>>temp3,addMuchie(temp1,temp2,temp3);
    fout<<bfs();
    return 0;
}