Pagini recente » Autentificare | Cod sursa (job #642738) | Cod sursa (job #2241544) | Cod sursa (job #2222043) | Cod sursa (job #1276566)
#include <stdio.h>
#include <vector>
using namespace std;
FILE *f=fopen("bellmanford.in","r");
FILE *g=fopen("bellmanford.out","w");
vector<int>a[100005];
int v[100005],n,m,x,y,z,use[100005],i,r;
void belmann(){
int i,c[500105],p,u,ct=0,nc;
vector<int>::iterator it;
p=1;
u=1;
c[p]=1;
for(i=2;i<=n;i++)
v[i]=20000008;
use[1]=1;
while(p<=u)
{
for(it=a[c[p]].begin();it!=a[c[p]].end();++it)
{
ct++;
if (ct%2==1)nc=*it;
else {
r=*it;
if (v[c[p]]+r<v[nc]){
v[nc]=v[c[p]]+*it;
if (use[nc]==0){u++;c[u]=nc;use[nc]=1;}
}
}
}
use[c[p]]=0;
p++;
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[x].push_back(z);
}
belmann();
for(i=2;i<=n;i++)
fprintf(g,"%d ",v[i]);
fclose(g);
return 0;
}