Cod sursa(job #831891)

Utilizator matei_cChristescu Matei matei_c Data 9 decembrie 2012 14:09:09
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std ;
 
#define inf 100000000
#define maxn 50001
 
int n, m ;
vector< pair<int, int> > graf[maxn] ;
vector< int > dist ;
queue< int > coada ;

void solve()
{
	dist.resize( n + 1, inf ) ;
	
    dist[1] = 0 ;
	
    coada.push( 1 ) ;
	
    while( ! coada.empty() )
    {
        int nod = coada.front() ;
 
		for(size_t i = 0; i < graf[nod].size(); ++i )
        {
            if( dist[ graf[nod][i].first ] > dist[nod] + graf[nod][i].second )
            {
                dist[ graf[nod][i].first ] = dist[nod] + graf[nod][i].second ;
                coada.push( graf[nod][i].first ) ;
            }
        }
		
		coada.pop() ;
    }
	
}

int main()
{
	
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	
	scanf("%d%d", &n, &m);
	
    for(int i = 1; i <= m; ++i )
    {
		int a, b, cost ;
        scanf("%d%d%d", &a, &b, &cost);
        graf[a].push_back( make_pair( b, cost ) ) ;
    }
	
	solve() ;
	
	for(int i = 2; i <= n; ++i )
	{
		if( dist[i] == inf )
			dist[i] = 0 ;
		
		printf("%d ", dist[i]);
	}
	
    return 0 ;

}