Cod sursa(job #175387)

Utilizator ScrazyRobert Szasz Scrazy Data 9 aprilie 2008 21:30:46
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

#define inf 0x3f3f3f3f
const int MAX_N = 50001;

//vector<vector<int> > G[MAX_N];
//vector<vector<int> > :: iterator i;
vector<pair<int,int> > G[MAX_N];
vector<int> d;

struct Comp
{
    bool operator ()(int i, int j)
    {
	return d[i] < d[j];
    }
};

priority_queue<int, vector<int>, Comp> Q;

int n, m;

void dijkstra()
{
    int i, k;
    for (i = 1; i <= n; ++i) d[i] = inf;
    d[1] = 0; Q.push(1);
    while (!Q.empty())
    {
	k = Q.top(); Q.pop();
	for (i = 0; i < G[k].size(); ++i)
	    if (d[G[k][i].first] > d[k] + G[k][i].second)
	    {
		d[G[k][i].first] = d[k] + G[k][i].second;
		Q.push(G[k][i].first);
	    }
    }
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d", &n, &m); 
    d.resize(n + 1);
    for (; m; --m)
    {
	int x, y, c; scanf("%d%d%d", &x, &y, &c); 
	G[x].push_back(make_pair(y,c));
	G[y].push_back(make_pair(x,c));
    } 

    dijkstra();
    for (int i = 2; i <= n; ++i) printf("%d ", d[i]);

    return 0;
}