Pagini recente » Cod sursa (job #2119876) | Cod sursa (job #302769) | Cod sursa (job #2677575) | Cod sursa (job #200781) | Cod sursa (job #1028271)
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
#define NMAX 1502
#define INF (1<<30)
#define MOD 104659
#define EPS 0.0000000001
int n;
int nr[NMAX],viz[NMAX];
double dist[NMAX];
vector <pair<int, double> > v[NMAX];
inline int cmp(double a,double b)
{
if(a>b+EPS)
return 1;
if(a+EPS<b)
return -1;
return 0;
}
int main()
{
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
int i,j,m,nod,x,y;
double c,mini;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%lf",&x,&y,&c);
v[x].push_back(make_pair(y,log(c)));
v[y].push_back(make_pair(x,log(c)));
}
for(i=2;i<=n;++i)
dist[i]=INF;
nr[1]=1;
//dist[1]=1;
for(i=1;i<=n;++i)
{
mini=INF;
for(j=1;j<=n;++j)
if(!viz[j] && dist[j]<mini)
{
mini=dist[j];
nod=j;
}
if(mini==INF)
break;
viz[nod]=1;
//printf("%d %d\n",mini,nod);
for(j=0;j<v[nod].size();++j)
{
if(cmp(dist[v[nod][j].first] , dist[nod]+v[nod][j].second)==0)
nr[v[nod][j].first]+=nr[nod];
else if(cmp(dist[v[nod][j].first] , dist[nod]+v[nod][j].second)==1)
{
dist[v[nod][j].first]=dist[nod]+v[nod][j].second;
nr[v[nod][j].first]=nr[nod];
}
}
}
for(i=2;i<=n;++i)
printf("%d ",nr[i]);
printf("\n");
return 0;
}