Pagini recente » Cod sursa (job #354879) | Cod sursa (job #2685524) | Cod sursa (job #2587564) | Cod sursa (job #2829145) | Cod sursa (job #1504568)
#include <bits/stdc++.h>
using namespace std;
ofstream fout("sate.out");
const int N = 30005;
const int M = 100030;
const int oo = 0x3f3f3f3f;
vector < pair <int, int> > graf[N];
int dist[N];
bitset <N> viz;
int n, m, start, finish;
void bfs(int start)
{
deque <int> coada;
coada.push_back(start);
viz[start] = true;
dist[start] = 0;
while (!coada.empty())
{
int nod = coada.front();
coada.pop_front();
for (const auto &it : graf[nod])
if (!viz[it.first])
if (dist[it.first] == oo || dist[it.first] > dist[nod] + it.second)
dist[it.first] = dist[nod] + it.second,
viz[it.first] = true,
coada.push_back(it.first);
}
fout << dist[finish];
}
int main()
{
freopen("sate.in", "r", stdin);
scanf("%d %d %d %d", &n, &m, &start, &finish);
for (int i = 1, a, b, c; i <= m; i++)
scanf("%d %d %d", &a, &b, &c),
graf[a].push_back(make_pair(b, c)),
graf[b].push_back(make_pair(a, -c));
memset(dist, oo, sizeof dist);
bfs(start);
return 0;
}