Cod sursa(job #2328101)

Utilizator andrei13Paval Andrei andrei13 Data 25 ianuarie 2019 13:19:16
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <list>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

int n,m;

list <int> adj[50005];
list <int> cost[50005];
int dist[50005];
bool incoada[50005];
int c[1000000];



void bell(int source)

{

    for(int i=1; i<=n; ++i)

        dist[i]=1<<30;

    dist[source]=0;

    c[1]=source;

    incoada[source]=1;

    int inc,sf;

    inc=sf=1;

    while(inc<=sf)

    {

        int nc=c[inc];

        incoada[nc]=0;

        list <int> :: iterator i,j;

        for(i=adj[nc].begin(),j=cost[nc].begin(); i!=adj[nc].end(); ++i,++j)

        {

            int u=*i;

            int cat=*j;

            if(dist[u]>dist[nc]+cat)

            {

                dist[u]=dist[nc]+cat;

                if(!incoada[u])

                {

                    c[++sf]=u;

                    incoada[u]=1;

                }

            }



        }

        ++inc;

    }

    for(int i=2; i<=n; ++i)
    if(dist[i]!=(1<<30))
        g<<dist[i]<<' ';
        else g<<0<<' ';

}



int main()

{
    f>>n>>m;
    for(int i=1; i<=m; ++i)
    {

        int a,b,c;

        f>>a>>b>>c;

        adj[a].push_back(b);

        cost[a].push_back(c);

    }
    bell(1);
    cout<<(sizeof(adj)+sizeof(cost)+sizeof(dist)+sizeof(incoada)+sizeof(c))/1024.00;

    return 0;

}