Pagini recente » Cod sursa (job #942318) | Cod sursa (job #2135703) | Cod sursa (job #408529) | Cod sursa (job #941031) | Cod sursa (job #1125114)
#include <cstdio>
#include <queue>
#include <vector>
#define INF 1<<30
#define MAXN 50001
#define MAXM 250001
using namespace std;
struct cmp
{
public:
bool operator()(const pair<int, int> a, const pair<int, int> b)
{
if (a.second!=b.second) return (a.second<b.second);
else return (a.first<b.first);
}
};
priority_queue<pair<int, int>, vector<pair<int, int> >, cmp> q;
vector<pair<int, int> > vec[MAXN];
int viz[MAXN];
int dist[MAXN];
int n,m;
void dijkstra(int startnod);
void init(int start);
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i = 0, a, b, c ; i < m ; ++i) {
scanf("%d %d %d",&a,&b,&c);
vec[a].push_back(make_pair(b,c));
}
int start = 1;
init(start);
dijkstra(start);
for (int i = 2 ; i<=n ; ++i)
printf("%d ",dist[i]==INF ? 0 : dist[i]);
return 0;
}
void init(int start)
{
for (int i = 1 ; i <= n ; ++i)
dist[i] = INF;
dist[start]=0;
}
void dijkstra(int startnod)
{
int tf;
q.push(make_pair(startnod,0));
while (!q.empty())
{
tf=q.top().first;
viz[tf]=1;
q.pop();
for (unsigned i = 0 ; i < vec[tf].size() ; ++i)
{
if (!viz[vec[tf][i].first])
if (dist[vec[tf][i].first] > dist[tf]+vec[tf][i].second) {
dist[vec[tf][i].first] = dist[tf]+vec[tf][i].second;
q.push(make_pair(vec[tf][i].first, dist[vec[tf][i].first]));
}
}
}
}