Pagini recente » Cod sursa (job #2821818) | Cod sursa (job #2775474) | Cod sursa (job #2211272) | Cod sursa (job #3041793) | Cod sursa (job #864630)
Cod sursa(job #864630)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define inf 0x3f3f3f3f
typedef struct{
long long vecin;
long long cost;
} nod;
vector < vector <nod> > Graf;
vector <long long> dist;
queue <int> Q;
long long N, M;
long long inceput, sfarsit;
long long a, b, c;
void citire(){
freopen("sate.in", "r", stdin);
scanf("%d %d %d %d", &N, &M, &inceput, &sfarsit);
Graf.resize(N+1);
for(; M; M--){
scanf("%d %d %d", &a, &b, &c);
nod x = {b, c};
nod y = {a, -c};
Graf[a].push_back(x);
Graf[b].push_back(y);
}
}
void dijkstra(){
dist.resize(N+1);
Q.push(inceput);
if(inceput == sfarsit)
return;
while(!Q.empty()){
int current = Q.front();
Q.pop();
vector <nod> ::iterator it;
for(it = Graf[current].begin(); it != Graf[current].end(); ++it){
if(dist[it->vecin] == 0){
dist[it->vecin] = dist[current] + it->cost;
Q.push(it->vecin);
if(it->vecin == sfarsit)
return;
}
}
}
}
void afis(){
freopen("sate.out", "w", stdout);
printf("%lld\n", dist[sfarsit]);
}
int main(){
citire();
dijkstra();
afis();
return 0;
}