Pagini recente » Rating Gitei Robert (el_robert) | Cod sursa (job #616087) | Cod sursa (job #754556) | Cod sursa (job #486446) | Cod sursa (job #1988021)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int inf=1e9;
const int nmax=50005;
struct el
{
int to,cost;
};
vector<el>g[nmax];
int n,m,dist[nmax];
bool viz[nmax];
class cmp
{
public:
bool operator()(el a,el b)
{
return a.cost>b.cost;
}
};
priority_queue<el,vector<el>,cmp> 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;
temp.to=1;
temp.cost=0;
heap.push(temp);
int sz,currnode,currcost;
while(!heap.empty())
{
node=heap.top().to;
cost=heap.top().cost;
viz[node]=1;
heap.pop();
sz=g[node].size();
for(i=0;i<sz;++i)
{
currnode=g[node][i].to;
currcost=g[node][i].cost;
if(viz[currnode]==0&&dist[node]+currcost<dist[currnode])
{
dist[currnode]=dist[node]+currcost;
temp.cost=currcost;
temp.to=currnode;
heap.push(temp);
}
}
}
for(i=2;i<=n;i++)
{
if(dist[i]==inf)
printf("0 ");
else
printf("%d ",dist[i]);
}
}