Pagini recente » Cod sursa (job #785406) | Cod sursa (job #2379936) | Cod sursa (job #2582257) | Cod sursa (job #374457) | Cod sursa (job #1482102)
#include <cstdio>
#include <vector>
#define NMAX 300023
using namespace std;
int q[NMAX],cst[NMAX],vis[NMAX];
vector <int> adj[NMAX],cost[NMAX];
int n,m,st,dr,nod1,nod2;
void bfs()
{
int nod=q[st];
st++;
if(st>dr) return;
vector<int>::iterator it1,it2;
for(it1=adj[nod].begin(),it2=cost[nod].begin();it1!=adj[nod].end();++it1,++it2)
{
if(vis[*it1]==0)
{
q[dr]=*it1;
dr++;
vis[*it1]=1;
cst[*it1]=*it2+cst[nod];
if(*it1==nod2) return;
}
}
bfs();
}
int main()
{
freopen ("sate.in","r",stdin);
freopen ("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&nod1,&nod2);
int x,y,c;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&c);
adj[x].push_back(y);
cost[x].push_back(c);
adj[y].push_back(x);
cost[y].push_back(-c);
}
cst[nod1]=0;
q[1]=nod1;
vis[nod1]=1;
st=1;
dr=2;
bfs();
printf("%d\n",cst[nod2]);
}