Pagini recente » Cod sursa (job #2170645) | Cod sursa (job #2065912) | Cod sursa (job #2357527) | Cod sursa (job #2702354) | Cod sursa (job #864638)
Cod sursa(job #864638)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
typedef struct{
int vecin;
int cost;
} nod;
vector < vector <nod> > Graf;
vector <int> dist;
//queue <int> Q;
int N, M;
int inceput, sfarsit;
int a, b, c;
int coada[30001];
int inc, sfc;
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);
coada[1] = inceput;
inc = sfc = 1;
while(inc <= sfc){
int current = coada[inc];
inc++;
//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;
if(it->vecin == sfarsit)
return;
//Q.push(it->vecin);
coada[++sfc] = it->vecin;
}
}
}
}
void afis(){
freopen("sate.out", "w", stdout);
printf("%d\n", dist[sfarsit]);
}
int main(){
citire();
dijkstra();
afis();
return 0;
}