Pagini recente » Cod sursa (job #548596) | Cod sursa (job #2329949) | Cod sursa (job #2681397) | Cod sursa (job #731352) | Cod sursa (job #812738)
Cod sursa(job #812738)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#include <climits>
using namespace std;
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
int N, M, X, Y;
vector <pair <int, int> > muchii[30011];
deque <pair <int, ll> > coada;
int atins[30011];
void Citire ()
{
ifstream fin ("sate.in");
fin >> N >> M >> X >> Y;
for (int i = 0, a, b, D; i < M; i++)
{
fin >> a >> b >> D;
muchii[a].pb (mp (b, 1LL * D));
muchii[b].pb (mp (a, 1LL * -D));
}
fin.close ();
}
int BFS ()
{
if (X == Y) return 0;
coada.pb (mp (X, 0));
atins[X] = 1;
int a, b;
while (!coada.empty ())
{
a = coada.front ().first;
b = coada.front ().second;
coada.pof ();
for (int i = muchii[a].size () - 1; i >= 0; i--)
{
if (muchii[a][i].first == Y) return b + muchii[a][i].second;
if (!atins[muchii[a][i].first])
{
atins[muchii[a][i].first] = 1;
coada.pb (mp (muchii[a][i].first, b + muchii[a][i].second));
}
}
}
return -1;
}
void Scriere ()
{
ofstream fout ("sate.out");
fout << BFS ();
fout.close ();
}
int main ()
{
Citire ();
Scriere ();
return 0;
}