Cod sursa(job #2031996)

Utilizator crion1999Anitei cristi crion1999 Data 4 octombrie 2017 10:26:13
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <queue>

#define INF 0x3f3f3f3f
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
queue<int> q;

vector<pair<int,int> > ways[30005];

vector<int> graph[30005];
int dist[30005];
int a,b,c;

int GetDistance(int a,int b)
{
    for(auto y:ways[a])
    {
        if(b== y.first)
            return y.second;
    }
}

void lee(int d)
{
    q.push(d);
    dist[d] = 0;
    while(!q.empty())
    {
        int x = q.front();
        q.pop();
        for(auto y:graph[x])
        {
            if(dist[y] == INF)
            {
                int k = dist[x] - GetDistance(x,y);
                int mk = dist[x] + GetDistance(x,y);
                if(x>y)
                {
                    dist[y] = k;
                }
                else if(x<y)
                {
                    dist[y] = mk;
                }

                q.push(y);
            }

        }
    }
}

int main()
{
    int n,m,x,y;
    fi>>n>>m>>x>>y;
    for(int i=1;i<=m;++i)
    {
        fi>>a>>b>>c;
        ways[a].push_back({b,c});
        ways[b].push_back({a,c});
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    for(int i=1;i<=n;++i)
        dist[i] = INF;
    lee(x);
    fo<<dist[y];




}