题面

这道题需要用到一个神奇的知识点:log(n*m)=log(n)+log(m);

所以对所有边权取个log,然后算log的最短路的同时维护乘积即可

#include <bits/stdc++.h>
#define int long long
using namespace std;
struct littlestar{
int to;
int nxt;
long long w;
}star[];
int head[],cnt;
long long n,m,s,t,p;
inline void add(int u,int v,long long w)
{
star[++cnt].to=v;
star[cnt].w=w;
star[cnt].nxt=head[u];
head[u]=cnt;
}
bool cmp(littlestar x,littlestar y)
{
return x.w<y.w;
}
priority_queue<pair<double,int> > q;
int vis[];
double dis[];
long long dis2[];
void dijkstra(int s)
{
for(int i=;i<=n;i++) dis[i]=99999999.999,dis2[i]=;
q.push(make_pair(0.00000,s));
dis[s]=0.0000;
while(q.size()){
int u=q.top().second;
q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(dis[v]>dis[u]+(double)log(star[i].w)){
dis[v]=dis[u]+(double)log(star[i].w);
dis2[v]=(star[i].w%p*dis2[u])%p;
q.push(make_pair(-dis[v],v));
}
}
}
}
signed main()
{
p=;
cin>>n>>m;
for(register int i=;i<=m;i++){
int u,v;
long long w;
scanf("%lld%lld",&u,&v);
cin>>w;
add(u,v,w);
add(v,u,w);
}
dijkstra();
cout<<dis2[n]<<" ";
}
/*
3 3 1 3 5
1 2 2
2 3 4
1 3 11 */

最新文章

  1. Node学习笔记(三):基于socket.io web版你画我猜(二)
  2. axis2+spring集成
  3. 公共交通3D指纹验证系统解决方案
  4. CSS浮动布局与菜单栏设计
  5. 课堂笔记--Strom并发模型
  6. Visual Studio 压力测试注意点
  7. (三)、Express 路由、静态文件、
  8. yaf框架流程三
  9. Maven学习小结(七 生命周期[转])
  10. 正三角形的外接圆面积,nyoj-274
  11. MYSQL 转换字符集的 2 种方法
  12. Nginx stream(TCP/UDP)负载均衡
  13. 跨线程传递栈变量带来异常指针Crash
  14. mycat安装与配置
  15. Visio打开或取消箭头的自动吸附和自动连接
  16. Linux内存管理(一)
  17. Python学习—基础篇之常用模块
  18. 性能监控(3)–linux下的iostat命令
  19. is interest important?
  20. WebApi的调用-3.Basic验证

热门文章

  1. JS如何设置和获取盒模型对应的宽和高
  2. codevs 5960 信使x
  3. 1003: [ZJOI2006]物流运输
  4. 【转载】多网卡的7种bond模式原理
  5. APIView源码与Request源码分析
  6. axios多并发请求
  7. Reduce pandas memory size
  8. JPA 开发写SQL时候遇见的困难点
  9. webpack学习之路--demo1
  10. Viola-Jones(人脸检测)