Pagini recente » Cod sursa (job #2530874) | Cod sursa (job #230129) | Cod sursa (job #1362920) | Cod sursa (job #1685772) | Cod sursa (job #523635)
Cod sursa(job #523635)
#include<fstream>
#include<vector>
#include<queue>
#include<math.h>
using namespace std;
ifstream f("dmin.in");
ofstream g("dmin.out");
# define nmax 1502
# define INF 22505
# define MOD 104659
typedef struct noduri{int vec;long double dist;};
vector <noduri> v[nmax];
queue <int> Q;
int N,M,P[nmax],l[nmax];
long double D[nmax];
bool inQ[nmax];
void citire()
{
f>>N>>M;
int i,a,b; noduri aux; long double c;
for(;M;--M)
{
f>>a>>aux.vec>>c;
if(c!=1) aux.dist=log10(c);
else aux.dist=1;
v[a].push_back(aux);
b=aux.vec; aux.vec=a;
v[b].push_back(aux);
}
for(i=1;i<=N;i++)
{
l[i]=v[i].size();
D[i]=INF;
}
}
int main()
{
citire();
int x,y,i;
inQ[1]=1; Q.push(1); P[1]=1; D[1]=0;
while(!Q.empty())
{
x=Q.front();inQ[x]=0;Q.pop();
for(i=0;i<l[x];i++)
{
y=v[x][i].vec;
if(D[x]+v[x][i].dist==D[y])
{
P[y]=(P[y]+P[x])%MOD;
if(!inQ[y])
{
inQ[y]=1; Q.push(y);
}
}
if(D[x]+v[x][i].dist<D[y])
{
D[y]=D[x]+v[x][i].dist;
P[y]=P[x];
if(!inQ[y])
{
inQ[y]=1; Q.push(y);
}
}
}
}
for(i=2;i<=N;i++) g<<D[i]<<' ';
}