Pagini recente » Cod sursa (job #2730639) | Cod sursa (job #3302952) | Cod sursa (job #3323843) | Profil Luncasu_Victor | Cod sursa (job #3321465)
#include <bits/stdc++.h>
using namespace std;
struct cez
{
int val,dist;
}a;
vector<cez>vecini[30005];
int distanta[30005];
int nod;
queue<int>q;
void bfs(int start)
{
q.push(start);
while(q.size()>0)
{
nod=q.front();
q.pop();
for(auto i : vecini[nod])
{
if(distanta[i.val]==-1)
{
q.push(i.val);
if(i.val<start&&nod<start)
{
if(i.val<nod)
distanta[i.val]=distanta[nod]+i.dist;
else
distanta[i.val]=distanta[nod]-i.dist;
}
else if(i.val<start&&nod>start)
{
distanta[i.val]=i.dist-distanta[nod];
}
else if(i.val>start&&nod<start)
{
distanta[i.val]=i.dist-distanta[nod];
}
else if(i.val>start&&nod>start)
{
if(i.val<nod)
distanta[i.val]=distanta[nod]-i.dist;
else
distanta[i.val]=distanta[nod]+i.dist;
}
else
{
distanta[i.val]=i.dist;
}
}
}
}
}
int main()
{
ifstream cin("sate.in");
ofstream cout("sate.out");
int n,m,start,finish,x,y,d;
cin>>n>>m>>start>>finish;
for(int i=1;i<=n;i++)
distanta[i]=-1;
distanta[start]=0;
for(int i=0;i<m;i++)
{
cin>>x>>y>>d;
a.val=y;
a.dist=d;
vecini[x].push_back(a);
a.val=x;
vecini[y].push_back(a);
}
bfs(start);
cout<<distanta[finish];
return 0;
}