Pagini recente » Cod sursa (job #1918080) | Cod sursa (job #1033711) | Cod sursa (job #1522603) | Cod sursa (job #2656763) | Cod sursa (job #1997684)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
typedef pair<int,int> ii;
const int inf=1e9;
const int nmax=50005;
struct el
{
int to,cost;
};
vector<el>g[nmax];
int n,m,dist[nmax];
priority_queue<ii , vector<ii> , greater<ii> > heap;
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int i,x;
el temp;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
dist[i]=inf;
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&temp.to,&temp.cost);
g[x].push_back(temp);
}
int node,cost;
dist[1]=0;
heap.push(ii(0,1));
int sz,currnode,currcost;
while(!heap.empty())
{
cost=heap.top().first;
node=heap.top().second;
heap.pop();
if ( cost != 0 && node != 1 )
continue;
sz=g[node].size();
for(i=0;i<sz;++i)
{
currnode=g[node][i].to;
currcost=g[node][i].cost;
if(dist[node]+currcost<dist[currnode])
{
dist[currnode]=dist[node]+currcost;
heap.push(ii(dist[currnode],currnode));
}
}
}
for(i=2;i<=n;i++)
{
if(dist[i]==inf)
printf("0 ");
else
printf("%d ",dist[i]);
}
}