Pagini recente » Cod sursa (job #682436) | Cod sursa (job #332473) | Cod sursa (job #672796) | Cod sursa (job #3269152) | Cod sursa (job #1894934)
#include<stdio.h>
#include<vector>
#include<queue>
#include<utility>
using namespace std;
priority_queue < pair < int , int >, vector < pair < int , int > > ,greater < pair < int , int > > >heap;
vector < pair < int , int > > lista[30001];
int dist[30001],n,m,x,y;
void citire (){
int i,a,b,c;
scanf("%d%d%d%d",&n,&m,&x,&y);
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
lista[a].push_back(make_pair(c,b));
lista[b].push_back(make_pair(-c,a));
}
}
void dijkstra (int nod){
int i,from,d,to,edge,pp;
heap.push(make_pair(0,nod));
for(i=1;i<=n;i++)
dist[i]=999999999;
dist[nod]=0;
while(!heap.empty()){
pp=1;
from=heap.top().second;
d=heap.top().first;
heap.pop();
if(dist[from]!=d)
pp=0;
for(i=0;i<lista[from].size()&&pp==1;i++){
to=lista[from][i].second;
edge=lista[from][i].first;
if(d+edge<dist[to]){
dist[to]=d+edge;
heap.push(make_pair(d+edge,to));
}
}
}
}
int main(){
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
citire();
dijkstra(x);
printf("%d\n",dist[y]);
return 0;
}