Pagini recente » Cod sursa (job #2365554) | Cod sursa (job #574790) | Cod sursa (job #628718) | Cod sursa (job #1753814) | Cod sursa (job #389819)
Cod sursa(job #389819)
#include<cstdio>
#include<cmath>
#include<vector>
#define baz 0.000000001
using namespace std;
const int N=2501,M=1000001;
int n,m,nr[N],s[N],q[M],p,u;
bool viz[N];
double c[N];
struct xy{
int to;
double c;
};
vector <xy> v[N];
void read()
{
int x,y,z;
xy a;
scanf("%d%d",&n,&m);
for( int i=1 ; i<=m ; ++i )
{
scanf("%d%d%d",&x,&y,&z);
a.to=y;
a.c=log10((double)z);
v[x].push_back(a);
a.to=x;
v[y].push_back(a);
++s[x];
++s[y];
}
}
void check(int x)
{
for( int i=0 ; i<s[x] ; ++i )
if( c[x]+v[x][i].c - c[ v[x][i].to ] < -baz || viz[v[x][i].to]==0 )
{
q[++u]=v[x][i].to;
c[v[x][i].to]=c[x]+v[x][i].c;
nr[v[x][i].to]=nr[x];
viz[v[x][i].to]=1;
}
else if( c[x]+v[x][i].c - c[v[x][i].to] < baz )
{
nr[v[x][i].to]+=nr[x];
}
}
void solve()
{
q[1]=1;
nr[1]=1;
viz[1]=1;
p=1;
u=1;
while( p<=u )
{
check(q[p]);
++p;
}
}
void afis()
{
for( int i=2 ; i<=n ; ++i )
printf("%d ",nr[i]);
}
int main()
{
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
read();
solve();
afis();
return 0;
}