Pagini recente » Cod sursa (job #1837425) | Cod sursa (job #2960033) | Cod sursa (job #424501) | Cod sursa (job #2494262) | Cod sursa (job #2135628)
#include <cstdio>
#include <vector>
using namespace std;
#define nmax 30005
struct str
{
int nod,cost;
};
vector<str>Q[nmax];
FILE *f=fopen("sate.in","r");
FILE *g=fopen("sate.out","w");
int n,m,x,y,dist[nmax];
bool passed=0;
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);
if (r1>r2)
{
Q[r1].push_back({r2,-r3});
Q[r2].push_back({r1,r3});
}
else
{
Q[r1].push_back({r2,r3});
Q[r2].push_back({r1,-r3});
}
}
}
void dfs(int nod)
{
if (nod==y)
passed=true;
if (passed)
return;
for (auto w:Q[nod])
{
if (!dist[w.nod])
{
if (passed)
return;
dist[w.nod]=dist[nod]+w.cost;
dfs(w.nod);
}
}
}
void solve()
{
dist[x]=1;
dfs(x);
fprintf(g,"%d",dist[y]-1);
}
int main()
{
read();
solve();
return 0;
}