Pagini recente » Cod sursa (job #1643851) | Cod sursa (job #88218) | Cod sursa (job #2638429) | Cod sursa (job #2962345) | Cod sursa (job #2135597)
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define nmax 30005
#define inf 1<<25
struct str{int nod,cost;};
vector<str>Q[nmax];
queue<int>que;
FILE *f=fopen("sate.in","r");
FILE *g=fopen("sate.out","w");
int n,m,x,y,dist[nmax];
void read()
{
fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
for (int i=1; i<=m; ++i)
{
int r1,r2,r3;
fscanf(f,"%d %d %d",&r1,&r2,&r3);
Q[r1].push_back({r2,r3});
Q[r2].push_back({r1,r3});
}
}
void solve()
{
for (int i=1;i<=n;++i)
dist[i]=inf;
dist[x]=0;
que.push(x);
while (!que.empty())
{
int nod=que.front();
que.pop();
for (auto w:Q[nod])
{
int nextnod=w.nod;
if (dist[nextnod]==inf)
{
if (nextnod>nod)
dist[nextnod]=dist[nod]+w.cost;
else
dist[nextnod]=dist[nod]-w.cost;
que.push(nextnod);
}
}
}
fprintf(g,"%d",dist[y]);
}
int main()
{
read();
solve();
return 0;
}