Cod sursa(job #1901603)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 4 martie 2017 09:52:32
Problema Drumuri minime Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <cmath>
#include <queue>
#define INF 1000000
#define MOD 104659
using namespace std;
ifstream fin("dmin.in");
ofstream fout("dmin.out");
struct data{
    int vecin;
    double cost;
};
vector <data> vec[1501];
queue <int> q;
double dmin[1501];
int nrd[1501];
int main()
{
    int n,m,i;
    int x,y,c;
    data a;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        a.vecin=y;a.cost=log(c);
        vec[x].push_back(a);
        a.vecin=x;
        vec[y].push_back(a);
    }
    nrd[1]=1;
    for(i=2;i<=n;i++)
    {
        dmin[i]=INF;
        nrd[i]=0;
    }
    q.push(1);
    while(!q.empty())
    {
        x=q.front();q.pop();
        for(i=0;i<vec[x].size();i++)
        {
            int vecin=vec[x][i].vecin;
            double cost=vec[x][i].cost;
            double del=dmin[vecin]-dmin[x]-cost;
            if(del<0)
                del=-del;
            if(del<0.0000000001)
                nrd[vecin]=(nrd[vecin]+nrd[x])%MOD;
            else
                if(dmin[vecin]>dmin[x]+cost+0.0000000001)
                {
                    dmin[vecin]=dmin[x]+cost;
                    nrd[vecin]=nrd[x];
                    q.push(vecin);
                }
        }
    }
    for(i=2;i<=n;i++)
    {
        fout<<nrd[i]%MOD<<' ';
    }
    return 0;
}