Pagini recente » Cod sursa (job #1834161) | Cod sursa (job #373386) | Cod sursa (job #2922242) | Cod sursa (job #2588066) | Cod sursa (job #2485659)
#include <bits/stdc++.h>
#define MAX 50100
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct arc
{
int y,cost;
};
inline bool operator<(arc a,arc b)
{
return a.cost>b.cost;
}
int d[MAX];
bool uz[MAX];
vector<arc>g[MAX];
priority_queue<arc>pq;
void dijkstra(int node);
void citire();
int n,m;
int main()
{
int i;
citire();
dijkstra(1);
for(i=2;i<=n;i++)
fout<<d[i]<<' ';
return 0;
}
void citire()
{
int i,x,y,cat;
fin>>n>>m;
for(i=1; i<=m; i++)
{
fin>>x>>y>>cat;
g[x].push_back({y,cat});
}
}
void dijkstra(int node)
{
int nodecrt,vecin,cat,i;
pq.push({node,0});
uz[node]=1;
while(!pq.empty())
{
nodecrt=pq.top().y;
pq.pop();
uz[nodecrt]=0;
for(i=0;i<g[nodecrt].size();i++)
{
vecin=g[nodecrt][i].y;
cat=g[nodecrt][i].cost;
if(!d[vecin]||d[vecin]>d[nodecrt]+cat)
{
d[vecin]=d[nodecrt]+cat;
if(!uz[vecin])
{
pq.push({vecin,d[vecin]});
uz[vecin]=1;
}
}
}
}
}