Pagini recente » Cod sursa (job #1094165) | Cod sursa (job #2854394) | Cod sursa (job #2955294) | Cod sursa (job #2881214) | Cod sursa (job #1053714)
#include<stdio.h>
#include<vector>
#include<queue>
#define dim 30000
using namespace std;
inline int comp(int x, int y)
{
if (x < y)
return 1;
return -1;
}
int main()
{
FILE*f = fopen("sate.in", "r");
FILE*g = fopen("sate.out", "w");
int n, m, X, Y;
fscanf(f, "%d %d %d %d", &n, &m, &X, &Y);
if (X>Y)
swap(X, Y);
int x, y, l;
vector<pair<int, int> >v[dim + 1];
for (int i = 1; i <= m; ++i)
{
fscanf(f, "%d%d%d", &x, &y, &l);
v[x].push_back(make_pair(y, l));
v[y].push_back(make_pair(x, l));
}
bool viz[dim + 1];
for (int i = 1; i <= n; ++i)
viz[i] = false;
int dist[dim + 1];
viz[X] = true;
dist[X] = 0;
queue<int> q;
q.push(X);
while (!q.empty())
{
int nod = q.front();
for (auto vecin : v[nod])
{
if (!viz[vecin.first])
{
q.push(vecin.first);
dist[vecin.first] = dist[nod] + comp(nod, vecin.first)*vecin.second;
viz[vecin.first] = true;
if (vecin.first == Y)
{
fprintf(g, "%d", dist[Y]);
return 0;
}
}
}
q.pop();
}
fclose(f);
fclose(g);
return 0;
}