Pagini recente » Cod sursa (job #2340294) | Cod sursa (job #1094208) | Cod sursa (job #641560) | Cod sursa (job #69990) | Cod sursa (job #2262007)
#include <bits/stdc++.h>
using namespace std;
const int nmax=50005;
vector <pair <int, int> > graph_orientat[nmax];
vector <pair <int, int> > coada;
int cost[nmax];
bool visited[nmax];
bool cmp(pair <int, int> a, pair <int, int> b)
{
return a.first>b.first;
}
void dijkstra(int start_node)
{
cost[start_node]=0;
visited[start_node]=true;
for(int i=0;i<graph_orientat[start_node].size();i++)
coada.push_back(make_pair(graph_orientat[start_node][i].first+cost[start_node], graph_orientat[start_node][i].second));
make_heap(coada.begin(), coada.end());
while(!coada.empty())
{
int ll;
ll=coada.size();
int current_node=coada.back().second;
if(visited[current_node]==false)
{
visited[current_node]=true;
cost[current_node]=coada.back().first;
for(int i=0;i<graph_orientat[current_node].size();i++)
coada.push_back(make_pair(graph_orientat[current_node][i].first+cost[current_node], graph_orientat[current_node][i].second));
coada[ll-1].first=2*nmax;
pop_heap(coada.begin(), coada.end(), cmp);
}
else
coada.pop_back();
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for(int i=1;i<=m;i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
graph_orientat[a].push_back(make_pair(c, b));
}
dijkstra(1);
for(int i=2;i<=n;i++)
printf("%d ", cost[i]);
printf("\n");
return 0;
}