Pagini recente » Cod sursa (job #1439382) | Cod sursa (job #2128884) | Monitorul de evaluare | Cod sursa (job #641713) | Cod sursa (job #3001594)
#include <fstream>
using namespace std;
ifstream fin("dijkstra2.in");
ofstream fout("dijkstra2.out");
#define inf 2000000002
int n,m,x,y,viz[100002],start[100002],nrc,cost,d[100002],coada[100002],pr,ul,nr,k,p;
struct nod
{
int vecin,cost,leg;
}L[500002];
int main()
{
fin>>n >> m >>p;
k=0;
for(int i=1;i<=m;i++)
{
fin>>x>>y >> cost;
k++;
L[k].vecin=y;
L[k].cost=cost;
L[k].leg=start[x];
start[x]=k;
k++;
L[k].vecin=x;
L[k].cost=cost;
L[k].leg=start[y];
start[y]=k;
}
for (int j = 1; j <= n; ++j) {
d[j]=inf;
}
d[p]=0;
coada[1]=p;
pr=1;
ul=1;
nr=1;
viz[p]=1;
while(nr>0){
x=coada[pr];
for (int i = start[x]; i!=0; i=L[i].leg) {
y=L[i].vecin;
if(d[y]>d[x]+L[i].cost){
d[y]=d[x]+L[i].cost;
if(viz[y]==0){
ul++;
if(ul>n){
ul=1;
}
coada[ul]=y;
viz[y]=1;
nr++;
}
}
}
pr++;
viz[x]=0;
if(pr>n){
pr=1;
}
nr--;
}
for (int i = 1; i <= n; ++i) {
if(d[i]==inf){
fout << "-1 ";
}else fout << d[i] << " ";
}
return 0;
}