题目大意:给定 N 个点,M 条边的有向图,边有边权,求从 1 号顶点到 N 号顶点的最短乘积路径。(经过的路径乘积最小)结果对9987取模。

乘积会爆 long long ,同时由于 dij 算法的性质,又不能在 bfs 的过程中对答案取模。

同时,根据对数的性质有 \(log(x)+log(y)=log(xy)\),因此,可以采用将边权取对数存入邻接表中,dij 比较的时候用这个取对数之后的边权比较,并记录路径,最后按照路径还原统一处理答案。

代码如下

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxv=1010;
  4. const int maxe=1e6+10;
  5. typedef pair<double,int> P;
  6. inline int read(){
  7. int x=0,f=1;char ch;
  8. do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
  9. do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
  10. return f*x;
  11. }
  12. struct node{
  13. int nxt,to,w;
  14. double lw;
  15. }e[maxe];
  16. int tot=1,head[maxv];
  17. int n,m,vis[maxv],pre[maxv][2];
  18. double dis[maxv];
  19. priority_queue<P> q;
  20. inline void add_edge(int from,int to,int w,double lw){
  21. e[++tot]=node{head[from],to,w,lw},head[from]=tot;
  22. }
  23. void read_and_parse(){
  24. n=read(),m=read();
  25. for(int i=1,from,to,w;i<=m;i++){
  26. from=read(),to=read(),w=read();
  27. add_edge(from,to,w,log(w));
  28. }
  29. }
  30. void solve(){
  31. for(int i=1;i<=n;i++)dis[i]=0x3f3f3f3f;
  32. dis[1]=0,q.push(make_pair(0,1));
  33. while(q.size()){
  34. int u=q.top().second;q.pop();
  35. if(vis[u])continue;
  36. if(u==n)break;
  37. vis[u]=1;
  38. for(int i=head[u];i;i=e[i].nxt){
  39. int v=e[i].to,w=e[i].w;
  40. double lw=e[i].lw;
  41. if(dis[v]>dis[u]+lw){
  42. dis[v]=dis[u]+lw;
  43. q.push(make_pair(-dis[v],v));
  44. pre[v][0]=u,pre[v][1]=w;
  45. }
  46. }
  47. }
  48. int ans=1;
  49. for(int t=n;t!=1;t=pre[t][0]){
  50. ans=ans*pre[t][1]%9987;
  51. }
  52. printf("%d\n",ans);
  53. }
  54. int main(){
  55. read_and_parse();
  56. solve();
  57. return 0;
  58. }

【洛谷P2384】最短乘积路径的更多相关文章

  1. 洛谷 P2384 最短路

    洛谷 P2384 最短路 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你10000000000000000000000000000 ...

  2. 洛谷 P1546 最短网络 Agri-Net

    题目链接 https://www.luogu.org/problemnew/show/P1546 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当 ...

  3. 洛谷P1546 最短网络 Agri-Net(最小生成树,Kruskal)

    洛谷P1546 最短网络 Agri-Net 最小生成树模板题. 直接使用 Kruskal 求解. 复杂度为 \(O(E\log E)\) . #include<stdio.h> #incl ...

  4. 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积

    纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...

  5. 洛谷——P2384 最短路

    P2384 最短路 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你10000000000000000000000000000000 ...

  6. [洛谷P2384]最短路

    题目大意:给你一个图,要你求出其中1->n路径中乘积最小的一条路 题解:用$log_2$把乘法变成加法,然后记录每个点的前驱,最后求出答案 C++ Code: #include<cstdi ...

  7. 洛谷 P2384 最短路题解

    题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w ...

  8. 洛谷 P1546 最短网络 Agri-Net Label:Water最小生成树

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

  9. 最短路洛谷P2384

    题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w ...

随机推荐

  1. SQL行转列汇总 (转)

    PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )A ...

  2. CSS 外边距

    CSS 外边距围绕在元素边框的空白区域是外边距.设置外边距会在元素外创建额外的“空白”. 设置外边距的最简单的方法就是使用 margin 属性,这个属性接受任何长度单位.百分数值甚至负值. ##### ...

  3. ASPCMS_判断语句if标签的使用

    这几天在仿个企业站,又用到了ASPCMS.这个CMS系统支持响应式模板——视访问设备而使用不同的模板,这样PC.手机都能兼顾. ▼官方给出的说明: 1.满足条件则显示 {if:条件语句} 显示内容 { ...

  4. Centos6.8下编译安装LAMP的操作记录梳理

    之前用的最多的web框架是LNMP,偶尔也会用到LAMP.接下来简单说下LAMP环境的部署记录,这里选择源码安装的方式: LAMP相关安装包下载地址:https://pan.baidu.com/s/1 ...

  5. Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)

    之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...

  6. cookie详解(含vue-cookie)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...

  7. Scrum Meeting NO.8

    Scrum Meeting No.8 1.会议内容 2.任务清单 徐越 序号 近期的任务 进行中 已完成 1 代码重构:前端通讯模块改为HttpClient+Json √ 2 添加对cookies的支 ...

  8. Sprint第三个计划

    这一次是最后的一个阶段,承上启下.这一阶段我们将转向Android的主要设计.加油,最后十天.

  9. 第三个spring冲刺第10天

    进入最后阶段冲刺最后一天了,基本的需求已经完成了,最后的布局问题也解决了,我们的软件正式推出了.

  10. Chrome查看HTTP

    查找cookie 补充: 接口调试使用postman挺不错的.以前每次都自己写一个ajax来进行接收调试. 如:用post发送json数据给接口,得到json数据. 工具有时候能让效率大大提升,要学会 ...