Pagini recente » Cod sursa (job #592804) | Cod sursa (job #552831) | Cod sursa (job #857516) | Cod sursa (job #397091) | Cod sursa (job #2290792)
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
#define F first
#define S second
#define VAL 1505
#define MOD 104659
#define INF 1000000000
using namespace std;
ifstream fin("dmin.in");
ofstream fout("dmin.out");
int N, M, i, j, A, B, C;
int dp[VAL], nod;
double X, cost[VAL];
bool ok[VAL];
vector < pair <int, double> > G[VAL];
vector < pair <int, double> > :: iterator it;
queue <int> Q;
void BFS()
{
Q.push(1);
while (Q.empty()==false)
{
nod=Q.front();
Q.pop();
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (cost[it->F]>cost[nod]+it->S)
{
cost[it->F]=cost[nod]+it->S;
Q.push(it->F);
}
}
}
}
int GETDP(int nod)
{
if (ok[nod]==true)
return dp[nod];
vector < pair <int, double> > :: iterator it;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (it->S==cost[nod]-cost[it->F])
{
dp[nod]+=GETDP(it->F);
dp[nod]%=MOD;
}
}
ok[nod]=true;
return dp[nod];
}
int main()
{
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> A >> B >> C;
X=C;
X=log2(X);
if (1<i && i<=N)
cost[i]=INF;
G[A].push_back({B, X});
G[B].push_back({A, X});
}
cost[N]=INF;
BFS();
dp[1]=1;
ok[1]=true;
for (i=2; i<=N; i++)
{
dp[i]=GETDP(i);
fout << dp[i] << " ";
}
fin.close();
fout.close();
return 0;
}