Pagini recente » Cod sursa (job #719790) | Cod sursa (job #2755737) | Cod sursa (job #816472) | Cod sursa (job #2575700) | Cod sursa (job #1568776)
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <functional>
#include <climits>
using namespace std;
int N,M;
map<int,vector<int> >graf;
map<pair<int,int>,int> cost;
void dijkstra(int stop)
{
map<int,int>a;
for(int i=2;i<=N;i++)
a[i]=INT_MAX;
a[1]=0;
priority_queue<int,vector<int>,greater<int> >q;
q.push(1);
while(!q.empty())
{
int nod=q.top();
q.pop();
for(int i=0;i<graf[nod].size();i++)
{
int v=graf[nod][i];
if(a[nod]+cost[make_pair(nod,v)]<a[v])
{
a[v]=a[nod]+cost[make_pair(nod,v)];
q.push(v);
}
}
}
for(int i=2;i<=N;i++)
if(a[i]==INT_MAX)
printf("0 ");
else printf("%d ",a[i]);
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&N,&M);
for(int i=0;i<M;i++)
{
int from,to,c;
scanf("%d %d %d",&from,&to,&c);
graf[from].push_back(to);
cost[make_pair(from,to)]=c;
}
dijkstra(2);
return 0;
}