Pagini recente » Cod sursa (job #1611842) | Cod sursa (job #1766884) | Cod sursa (job #782094) | Cod sursa (job #187251) | Cod sursa (job #1504581)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sate.in");
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;
char parser[105];
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()
{
fin >> n >> m >> start >> finish;
fin.get();
for (int i = 1, a, b, c; i <= m; i++)
{
a = b = c = 0;
fin.getline(parser, 100);
int i1 = 0;
while (parser[i1] == ' ') i1++;
for (; parser[i1] != ' '; i1++)
a = a * 10 + (parser[i1] - '0');
i1++;
for (; parser[i1] != ' '; i1++)
b = b * 10 + (parser[i1] - '0');
i1++;
for (; parser[i1]; i1++)
c = c * 10 + (parser[i1] - '0');
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;
}