Cod sursa(job #1856436)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 24 ianuarie 2017 21:05:04
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int Max = 30007;
int n, m, gecmis[Max], x, y;
long long mesafeler[Max];

vector < pair < int, long long > > baglanti[Max];
queue <int> q;

void bfs()
{
    gecmis[x] = true;
    q.push(x);
    while(!q.empty())
    {
        x = q.front();
        q.pop();
        if(x == y)
        {
            break;
        }
        for(int i = 0; i < baglanti[x].size(); ++i)
        {
            if(!gecmis[baglanti[x][i].first])
            {
                gecmis[baglanti[x][i].first] = true;
                mesafeler[baglanti[x][i].first] = mesafeler[x] + baglanti[x][i].second;
                q.push(baglanti[x][i].first);
            }
            else if(mesafeler[baglanti[x][i].first] > mesafeler[x] + baglanti[x][i].second)
            {
                gecmis[baglanti[x][i].first] = true;
                mesafeler[baglanti[x][i].first] = mesafeler[x] + baglanti[x][i].second;
                q.push(baglanti[x][i].first);
            }
        }
    }
}

int main()
{
    int sat1, sat2, mesafe;
    in >> n >> m >> x >> y;
    if(x > y)
        swap(x, y);
    for(int i = 1; i <= m; ++i)
    {
        in >> sat1 >> sat2 >> mesafe;
        baglanti[sat1].push_back(make_pair(sat2, mesafe));
        mesafe*= -1;
        baglanti[sat2].push_back(make_pair(sat1, mesafe));
    }
    bfs();

    out << mesafeler[y];

    return 0;
}