Pagini recente » Cod sursa (job #1008740) | Cod sursa (job #1048944) | Cod sursa (job #2000070) | Cod sursa (job #1083019) | Cod sursa (job #3003456)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int NMAX=50005;
vector <pair <int,int> > graph[NMAX];
int dist[NMAX];
bool vis[NMAX];
priority_queue < pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > pq;
void dijkstra(int node)
{
int x;
dist[node]=0;
pq.push({0,node});
while(!pq.empty())
{
x=pq.top().second;
pq.pop();
if(!vis[x])
{
vis[x]=true;
for(auto neighbour: graph[x])
{
if((dist[x]+neighbour.first)<dist[neighbour.second])
{
dist[neighbour.second]=dist[x]+neighbour.first;
pq.push({dist[neighbour.second],neighbour.second});
}
}
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int n,m,i,x,y,c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
graph[x-1].push_back({c,y-1}); //vector de la 0
}
for(i=0;i<n;i++)
dist[i]=2e9;
dijkstra(0);
for(i=1;i<n;i++)
{
if(dist[i]==2e9)
printf("0 ");
else
printf("%d ",dist[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}