Cod sursa(job #2302319)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 14 decembrie 2018 10:13:51
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
const int N=50001;
struct P
{
    int x,y;
    P *u;
};
P *g[N],*p;
int m,n,i,k,l,r,d[N],e[2*N],a,b,c,v[N],u[N];
void A(int a,int b,int c)
{
    P *q=new P;
    q->x=b,q->y=c,q->u=g[a],g[a]=q;
}
int main()
{
    freopen("bellmanford.in","r",stdin),freopen("bellmanford.out","w",stdout),scanf("%d%d",&n,&m);
    while(m--)
        scanf("%d%d%d",&a,&b,&c),A(a,b,c);
    for(i=2;i<=n;i++)
        d[i]=N;
    for(e[r++]=v[1]=1;l<r&&!k;)
        for(i=e[l++],v[i]=0,p=g[i];p&&!k;p=p->u)
            if(d[p->x]>d[i]+p->y)
            {
                d[p->x]=d[i]+p->y;
                if(!v[p->x])
                    if(u[p->x]>n)
                        k=1;
                    else
                        e[r++]=p->x,v[p->x]=1,u[p->x]++;
            }
    if(k)
        printf("Ciclu negativ!");
    else
        for(i=2;i<=n;i++)
            printf("%d ",d[i]);
}