Pagini recente » Cod sursa (job #2443019) | Cod sursa (job #547091) | Cod sursa (job #1938037) | Cod sursa (job #3168044) | Cod sursa (job #802148)
Cod sursa(job #802148)
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
#define NMAX 100010
#define INF 0x3f3f3f3f
int N, M;
int dist[NMAX];
vector < pair <int, int> > graph[NMAX];
void read_data () {
scanf ("%d %d", &N, &M);
int x, y, z;
for (int i = 0; i < M; i++) {
scanf ("%d %d %d", &x, &y, &z);
graph[x].push_back ( make_pair (y, z) );
graph[y].push_back ( make_pair (x, z) );
}
}
void dijkstra () {
int node;
int use[NMAX];
set < pair <int, int> > S;
memset (use, 0, sizeof (use));
memset (dist, INF, sizeof (dist));
dist[1] = 0; use[1] = 1;
S.insert ( make_pair (0, 1) );
for (int i = 2; i <= N; i++) {
node = S.begin ()->second;
S.erase ( S.begin () );
for (vector < pair <int, int> >::iterator it = graph[node].begin (); it != graph[node].end (); it++)
if (dist[it->first] > dist[node] + it->second ) {
if (use[it->first])
S.erase ( S.find ( make_pair (dist[it->first], it->first) ) );
dist[it->first] = dist[node] + it->second;
S.insert ( make_pair (dist[it->first], it->first) );
use[it->first] = 1;
}
}
}
int main () {
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
read_data ();
dijkstra ();
for (int i = 2; i <= N; i++)
if (dist[i] == INF) printf ("0 ");
else printf ("%d ", dist[i]);
return 0;
}