Pagini recente » Cod sursa (job #27078) | Cod sursa (job #3138514) | Cod sursa (job #2432092) | Cod sursa (job #1356884) | Cod sursa (job #2176508)
#include <cstdio>
#include <iostream>
#include <queue>
#include <climits>
#define NMAX 50000+5
#define mp make_pair
#define p pair<int,int>
#define f first
#define s second
using namespace std;
int N,M;
bool c[NMAX];
long long D[NMAX];
vector <p> leg[NMAX];
p X;
struct comp
{
bool operator()(int x,int y)
{
return D[x]>D[y];
}
};
// priority_queue<int, vector<int>, comp>q;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
void dijkstra(int nodi)
{
for(int i=1; i<=N; i++)
D[i]=INT_MAX;
D[nodi]=0;
q.push({0,nodi});
while(!q.empty())
{
X=q.top();
int cost=X.f;
int poz=X.s;
q.pop();
if(c[poz])continue;
c[poz]=true;
for(int i=0; i<leg[poz].size(); ++i)
if(D[leg[poz][i].first]>cost+leg[poz][i].second)
{
D[leg[poz][i].first]=cost+leg[poz][i].second;
q.push({D[leg[poz][i].first],leg[poz][i].first});
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&N,&M);
for(int i=1; i<=M; i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
leg[x].push_back(mp(y,z));
}
dijkstra(1);
for(int i=2;i<=N;i++)
{
if(D[i]==INT_MAX)
printf("0 ");
else
printf("%d ",D[i]);
}
return 0;
}