Pagini recente » Cod sursa (job #773924) | Cod sursa (job #2448661) | Cod sursa (job #205007) | Cod sursa (job #1132542) | Cod sursa (job #2442136)
#include <cstdio>
#include<vector>
using namespace std;
#define INF 1000000001
struct arc
{
int v,c;
};
struct parent
{
int v,t;
};
vector <arc>G[50001];
parent d[50001];
int f[50001];
int ans[50001];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int n,m,a,b,c,tot,i;
arc arc1;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
arc1.v=b;
arc1.c=c;
G[a].push_back(arc1);
arc1.v=a;
G[b].push_back(arc1);
}
for(i=2;i<=n;i++)
d[i].v=INF;
bool ok=1;
int fi;
fi=1;
tot=0;
while(ok)
{
f[fi]=1;
for(i=0;i<G[fi].size();i++)
if(d[G[fi][i].v].v>G[fi][i].c){
d[G[fi][i].v].v=G[fi][i].c;
d[G[fi][i].v].t=fi;
}
int min1=INF,poz=INF;
ok=0;
for(i=2;i<=n;i++){
if(f[i]==0)
ok=1;
if(d[i].v<min1 && f[i]==0)
{
min1=d[i].v;
poz=i;
}
}
if(poz!=INF)
ans[poz]=d[poz].v+d[d[poz].t].v;
fi=poz;
}
for(i=2;i<=n;i++)
printf("%d ",ans[i]);
return 0;
}