Pagini recente » Cod sursa (job #1123393) | Cod sursa (job #250537) | Monitorul de evaluare | Cod sursa (job #704698) | Cod sursa (job #3224471)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin ("sate.in");
ofstream cout ("sate.out");
vector < pair <int , int> > adiacenta[30001];
int distanta[30001];
int main ()
{
int numar_noduri , numar_muchii , inceput , sfarsit;
cin >> numar_noduri >> numar_muchii >> inceput >> sfarsit;
while (numar_muchii--)
{
int nod_1 , nod_2 , distanta;
cin >> nod_1 >> nod_2 >> distanta;
adiacenta[nod_1].push_back({nod_2 , distanta});
adiacenta[nod_2].push_back({nod_1 , distanta});
}
queue <int> candidati;
for (candidati.push(inceput) , distanta[inceput] = 1 ; !distanta[sfarsit] ; candidati.pop())
{
inceput = candidati.front();
for (auto nod_vecin : adiacenta[inceput]) {
if (!distanta[nod_vecin.first]) {
if (nod_vecin.first < inceput) { distanta[nod_vecin.first] = distanta[inceput] - nod_vecin.second; }
else { distanta[nod_vecin.first] = distanta[inceput] + nod_vecin.second; }
candidati.push(nod_vecin.first);
}
}
}
cout << distanta[sfarsit] - 1;
cout.close(); cin.close();
return 0;
}