Cod sursa(job #1194516)

Utilizator xtreme77Patrick Sava xtreme77 Data 3 iunie 2014 23:46:46
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <vector>
#include <queue>
#define pb push_back
#define mp make_pair
#define f first
#define s second
const int MAX = 50100;
const int INF = 1<<30;
using namespace std;
int d[MAX];
typedef pair<int,int> P;
vector <P> gr[MAX];
bool incoada[MAX];
void dijkstra(){
    queue<int> q;
    q.push(1);
    d[1]=0;
    incoada[1]=1;
    while(!q.empty()){
        int fata=q.front();
        q.pop();
        incoada[fata]=0;
        for(vector <P> ::iterator it=gr[fata].begin();it!=gr[fata].end();++it){
            if(d[fata]+it->s<d[it->f]){
                d[it->f]=d[fata]+it->s;
                if(!incoada[it->f]){
                    incoada[it->f]=1;
                    q.push(it->f);
                }
            }
        }
    }
}
int main()
{
    int n,m;int x,y,val;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=2;i<=n;++i)d[i]=INF;
    for(int i=1;i<=m;++i){
        scanf("%d%d%d",&x,&y,&val);
        gr[x].pb(mp(y,val));
    }
    dijkstra();
    for(int i=2;i<=n;++i)printf("%d ",d[i]==INF?0:d[i]);
    printf("\n");

    return 0;
}