Pagini recente » Cod sursa (job #121585) | Cod sursa (job #184591) | Cod sursa (job #1489322) | Cod sursa (job #1033958) | Cod sursa (job #831451)
Cod sursa(job #831451)
#include<vector>
#include<queue>
#include<cstdio>
using namespace std;
int x,y,d,s,f,acum,n,m;
int viz[100005];
struct drum{ int u, c;}; //unde ajung, cat ma costa
deque <int> q;
vector <drum> l[100050];
vector <int> nivel(30000,-1);
int main(){
freopen("sate.in","r",stdin); freopen("sate.out","w",stdout);
scanf("%d%d%d%d", &n, &m, &s, &f); //n sate, m drumuri
for(int i=1;i<=m;++i){
scanf("%d%d%d", &x, &y, &d);
l[x].push_back(drum{y, d});
l[y].push_back(drum{x,-d});
}
q.push_back(s); viz[s]=1; nivel[s]=0;
while(!q.empty()){
acum=q.front(); q.pop_front();
viz[acum]=1;
for(unsigned int i=0; i<l[acum].size(); ++i){
if(viz[l[acum][i].u]==0){
viz[l[acum][i].u]=1;
nivel[l[acum][i].u]=nivel[acum]+l[acum][i].c;
q.push_back(l[acum][i].u);
}
}
}
printf("%d\n", nivel[f]);
return 0;
}