Pagini recente » Cei mai harnici utilizatori info-arena | Cod sursa (job #2281610) | Cod sursa (job #184335) | Cod sursa (job #837687) | Cod sursa (job #975798)
Cod sursa(job #975798)
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<deque>
#include<vector>
#include<bitset>
#define nmax 1501
#define E 1e-9
#define mod 204659
#define inf 2000000000
using namespace std;
int n,i,j,k,m,x,y,rez[nmax];
double dist[nmax];
vector<pair<int,double> >v[nmax];
deque<int>c;
bitset<nmax>viz;
int main()
{
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=m;i++)
{
double cost;
scanf("%d %d %d",&x,&y,&k);
cost=log(k);
v[x].push_back(make_pair(y,cost));
v[y].push_back(make_pair(x,cost));
}
for(i=2;i<=n;i++) dist[i]=inf;
c.push_back(1);rez[1]=1;viz[1]=true;
while (!c.empty())
{
x=c.front();c.pop_front();viz[x]=false;
for (vector<pair<int,double> >::iterator it=v[x].begin();it!=v[x].end();++it)
{
y=(*it).first;
if (dist[x]+(*it).second+E<dist[y])
{
dist[y]=dist[x]+(*it).second;
rez[y]=rez[x];
if (!viz[y]) c.push_back(y),viz[y]=true;
}else
if (fabs(dist[x]+(*it).second-dist[y])<E)
{
rez[y]+=rez[x];
if (rez[y]>=mod) rez[y]-=mod;
}
}
}
for (i=2;i<=n;i++) printf("%d ",rez[i]);
return 0;
}