Cod sursa(job #1894934)

Utilizator lauratalaatlaura talaat lauratalaat Data 27 februarie 2017 17:59:06
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#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;
}