Pagini recente » Cod sursa (job #295090) | Cod sursa (job #131292) | Cod sursa (job #1544640) | Cod sursa (job #2169455) | Cod sursa (job #864853)
Cod sursa(job #864853)
#include <cstdio>
#include <queue>
using namespace std;
#define Nmax 30001
struct nod{
int vecin;
int cost;
nod *next;
};
nod *Graf[Nmax];
vector <int> dist;
queue <int> Q;
int N, M;
int inceput, sfarsit;
int a, b, c;
void citire(){
freopen("sate.in", "r", stdin);
scanf("%d %d %d %d", &N, &M, &inceput, &sfarsit);
dist.resize(N+1);
for(; M; M--){
scanf("%d %d %d", &a, &b, &c);
nod *p = new nod;
p->vecin = b;
p->cost = c;
p->next = Graf[a];
Graf[a] = p;
nod *t = new nod;
t->vecin = a;
t->cost = -c;
t->next = Graf[b];
Graf[b] = t;
}
}
void dijkstra(){
Q.push(inceput);
while(!Q.empty()){
int current = Q.front();
Q.pop();
nod *p = Graf[current];
nod *c = p;
while(c){
if(dist[c->vecin] == 0){
dist[c->vecin] = dist[current] + c->cost;
if(c->vecin == sfarsit)
return;
Q.push(c->vecin);
}
c = c->next;
}
}
}
void afis(){
freopen("sate.out", "w", stdout);
printf("%d\n", dist[sfarsit]);
}
int main(){
citire();
dijkstra();
afis();
return 0;
}