Pagini recente » Cod sursa (job #985029) | Cod sursa (job #1831790) | Cod sursa (job #1740526) | Cod sursa (job #169515) | Cod sursa (job #2798470)
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
using ull = unsigned long long;
ifstream cin("sate.in");
ofstream cout("sate.out");
const int NMAX = 3e4;
const int INF = ~(1 << 31);
int n, m, x, y;
struct NOD
{
int nod;
int dist;
};
vector<vector<NOD>> edges;
int viz[NMAX + 5];
/*void dfs(int node, int lastnode, int lastdist)
{
viz[node] = 1;
for (int k = 0; k < edges[node].size(); k++)
{
int nextnode = edges[node][k].nod;
int nextdist = edges[node][k].dist;
if (viz[nextnode] == 0)
{
if (node != 1)
{
int aux;
if (lastnode < node && node < nextnode || lastnode > node && node > nextnode)
aux = lastdist + nextdist;
else
aux = abs(lastdist - nextdist);
edges[lastnode].push_back({nextnode, aux});
}
dfs(nextnode, node, nextdist);
}
}
}*/
void bfs(int start)
{
queue<int> q;
q.push(start);
viz[start] = 0;
while (!q.empty())
{
int node = q.front();
q.pop();
for (int k = 0; k < edges[node].size(); k++)
{
int nextnode = edges[node][k].nod;
int nextdist = edges[node][k].dist;
if (viz[edges[node][k].nod] == 0)
{
if (edges[node][k].nod > node)
viz[edges[node][k].nod] = viz[node] + edges[node][k].dist;
else
viz[edges[node][k].nod] = viz[node] - edges[node][k].dist;
q.push(edges[node][k].nod);
}
}
}
}
int main()
{
cin >> n >> m >> x >> y;
edges.resize(n + 1);
for (int i = 1; i <= m; i++)
{
int a, b, d;
cin >> a >> b >> d;
edges[a].push_back({b, d});
edges[b].push_back({a, d});
}
bfs(x);
cout << viz[y];
return 0;
}