Cod sursa(job #2478572)

Utilizator eduardmirceabraguta eduard eduardmircea Data 22 octombrie 2019 13:33:49
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>


using namespace std;
int n,m;
ifstream in ("bellmanford.in");
ofstream out ("bellmanford.out");
vector <pair<long,long >>g[100001];
queue<int>q;
long long  lg[100001],use[100001],d[100001];
void bell ()
{
    int x,y;
    int cn=0;
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        use[x]=0;
        for(int i=0; i<g[x].size(); ++i)
        {
            int cost=g[x][i].first;
            int y=g[x][i].second;
            if(d[x]+cost<d[y])
            {
                d[y]=d[x]+cost;
                lg[y]=lg[x]+1;
                if(lg[y]>n)
                {
                    cn=1;
                    break;
                }
                if(use[y]==0)
                {
                    q.push(y);
                    use[y]=1;
                }
            }

        }

    if(cn==1)break;
    }
}
int main()
{
    int x,y,c;
    in>>n>>m;
    for(int i=0; i<m; i++)
    {
        in>>x>>y>>c;
        g[x].push_back({c,y});


    }
    for(int i=2; i<=n; i++)
    {
        use[i]=0;
        d[i]=99999999;
        lg[i]=0;

    }
    use[1]=1;
    lg[1]=1;
    d[1]=0;
    q.push(1);
    bell();
    for(int i=2; i<=n; i++)out<<d[i]<<" ";


    return 0;
}