Pagini recente » Cod sursa (job #446464) | Cod sursa (job #2415633) | Cod sursa (job #647418) | Cod sursa (job #1826938) | Cod sursa (job #2949857)
//Ilie Dumitru
#include<cstdio>
#include<vector>
#include<queue>
const int inf=1000000007;
const int NMAX=50005;
struct edge
{
int node, cost;
friend bool operator<(edge a, edge b)
{
return a.cost>b.cost;
}
};
std::vector<edge> G[NMAX];
int minDist[NMAX];
int N;
void dijkstra()
{
int i, x, n, m, c;
std::priority_queue<edge> pq;
for(i=1;i<N;++i)
minDist[i]=inf;
pq.push({0, 0});
do
{
n=pq.top().node;
c=pq.top().cost;
pq.pop();
if(minDist[n]==c)
{
for(i=0;i<(int)G[n].size();++i)
{
m=G[n][i].node;
x=c+G[n][i].cost;
if(x<minDist[m])
{
minDist[m]=x;
pq.push({m, x});
}
}
}
}while(!pq.empty());
for(i=1;i<N;++i)
printf("%d ", minDist[i]%inf);
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int i, _, x, y, w;
scanf("%d%d", &N, &_);
for(i=0;i<_;++i)
{
scanf("%d%d%d", &x, &y, &w);
G[x-1].push_back({y-1, w});
}
dijkstra();
return 0;
}