Pagini recente » Cod sursa (job #1018198) | Cod sursa (job #2794968) | Cod sursa (job #1846984) | Cod sursa (job #1040389) | Cod sursa (job #1771047)
#include <bits/stdc++.h>
#define inf (int)1e9
#define nmax 50001
#define pb push_back
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct arc
{
int v,c;
};
int i,j,c,p;
int n;
int d[nmax],v[nmax];
vector<arc>g[nmax];
struct qx
{
bool operator()(arc a, arc b)
{
return a.c>b.c;
}
};
priority_queue < arc, vector<arc>, qx >coada;
void dijkstra(int p)
{
int i;
for(i=0;i<g[p].size();i++)
{
d[g[p][i].v]=g[p][i].c;
coada.push(g[p][i]);
}
v[p]=0;
int ok=0;
arc f;
while(!coada.empty())
{
f=coada.top();
coada.pop();
if(!v[f.v])
{
v[f.v]=1;
for(i=0;i<g[f.v].size();i++)
if(!v[g[f.v][i].v])
if(d[g[f.v][i].v]>d[f.v]+g[f.v][i].c)
{
d[g[f.v][i].v]=d[f.v]+g[f.v][i].c;
coada.push({g[f.v][i].v,d[g[f.v][i].v]});
}
}
}
}
int main()
{
fin>>n>>p;
while(fin>>i>>j>>c)
g[i].pb({j,c});
for(i=1;i<=n;i++)d[i]=inf;
d[1]=0;
dijkstra(1);
for(i=2;i<=n;i++)
fout<<(d[i]==inf ? 0 : d[i])<<" ";
return 0;
}