Pagini recente » Cod sursa (job #1607300) | Cod sursa (job #237474) | Cod sursa (job #935795) | Cod sursa (job #1758191) | Cod sursa (job #1968803)
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <queue>
using namespace std;
FILE *fin=fopen("dijkstra.in","r");
FILE *fout=fopen("dijkstra.out","w");
priority_queue <pair <int, int>, vector <pair <int, int> >, greater <pair <int, int> > > H;
#define nmax 50010
int n,m,i,d[nmax];
vector <int> v[nmax],cost[nmax];
int main()
{
fscanf(fin,"%d%d",&n,&m);
for (i=1; i<=m; i++)
{
int a,b,c;
fscanf(fin,"%d%d%d",&a,&b,&c);
v[a].push_back(b);
cost[a].push_back(c);
}
for (i=2; i<=n; i++)
d[i]=50000001;
H.push(make_pair(d[1],1));
while (!H.empty())
{
int x=H.top().second;
H.pop();
for (i=0; i<v[x].size(); i++)
{
int vecin=v[x][i];
if (d[x]+cost[x][i]<d[vecin])
{
d[vecin]=d[x]+cost[x][i];
H.push(make_pair(d[vecin],vecin));
}
}
}
for (i=2; i<=n; i++)
if (d[i]==50000001)
fprintf(fout,"0 ");
else
fprintf(fout,"%d ",d[i]);
}