洛谷 P2384 最短路题解

题目背景

狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗?

他会给你100000000000000000000000000000000000%10金币w

题目描述

给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径。

输入格式

第一行读入两个整数n,m,表示共n个点m条边。 接下来m行,每行三个正整数x,y,z,表示点x到点y有一条边权为z的边。

输出格式

输出仅包括一行,记为所求路径的边权之积,由于答案可能很大,因此狗哥仁慈地让你输出它模9987的余数即可。

废话当然是一个数了w

//谢fyszzhouzj指正w

对于20%的数据,n<=10。

对于100%的数据,n<=1000,m<=1000000。边权不超过10000。

输入输出样例

输入 #1复制
3 3
1 2 3 
2 3 3 
1 3 10
输出 #1复制
9

说明/提示

好好看一看再写哟w


 

题解

这道题目和通常的最短路的最大差别在于它计算的不是边权之和,二是边权乘积。代码如下。里面只有一个小坑就是有两个测试例的数据中边长可能为9987,所以如果直接将边的成绩去模9987会产生0,从而出现错误结果。程序中对这种情况进行了特判,如果出现模后的结果为0,则将模后的结果指定为9987。

  1 #include <iostream>
  2 #include <queue>
  3 #include <string.h>
  4 
  5 using namespace std;
  6 
  7 struct edge
  8 {
  9     int    zhongdian, changdu;
 10     int    next = 0;
 11 };
 12 
 13 int first[2333];
 14 
 15 edge ed[200005];
 16 
 17 int n, m, en;
 18 
 19 void add_edge( int s, int e, int d )
 20 {
 21     en++;
 22     ed[en].next        = first[s];
 23     first[s]        = en;
 24     ed[en].zhongdian    = e;
 25     ed[en].changdu        = d;
 26 }
 27 
 28 
 29 const int    MAXN    = 100010;
 30 const int    INF    = 0x3f3f3f3f;
 31 int        dist[MAXN];
 32 
 33 bool use[MAXN];
 34 
 35 struct rec
 36 {
 37     int p, dist;
 38 
 39     rec()
 40     {
 41     }
 42     rec( int a, int b )
 43 
 44     {
 45         p = a, dist = b;
 46     }
 47 };
 48 
 49 bool operator < (const rec &a, const rec &b)
 50 
 51 {
 52     return(a.dist > b.dist);
 53 }
 54 
 55 priority_queue<rec> heap;
 56 
 57 void dijkstra_heap()
 58 
 59 {
 60     memset( dist, 0x3f3f, sizeof(dist) );
 61 
 62     dist[1] = 1;
 63     for ( int a = 1; a <= n; a++ )
 64     {
 65         heap.push( rec( a, dist[a] ) );
 66     }
 67     for ( int a = 1; a <= n; a++ )
 68     {
 69         while ( use[heap.top().p] )
 70         {
 71             heap.pop();
 72         }
 73         rec now = heap.top();
 74         heap.pop();
 75         int p = now.p;
 76         use[p] = true;
 77         for ( int i = first[p]; i; i = ed[i].next )
 78         {
 79             if ( dist[p] * ed[i].changdu < dist[ed[i].zhongdian] )
 80 
 81             {
 82                 dist[ed[i].zhongdian] = (dist[p] * ed[i].changdu) % 9987;
 83                 if ( dist[ed[i].zhongdian] == 0 )
 84                 {
 85                     dist[ed[i].zhongdian] = 9987;
 86                 }
 87                 heap.push( rec( ed[i].zhongdian, dist[ed[i].zhongdian] ) );
 88             }
 89         }
 90     }
 91 }
 92 
 93 
 94 int main()
 95 {
 96     cin >> n >> m;
 97     for ( int a = 1; a <= m; a++ )
 98     {
 99         int s, e, d;
100         cin >> s >> e >> d;
101         add_edge( s, e, d );
102         add_edge( e, s, d );
103     }
104     dijkstra_heap();
105     cout << dist[n] << endl;
106     return(0);
107 }

 

 

转载于:https://www.cnblogs.com/zealsoft/p/11530015.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IndentationError: expected an indented block --python报错 or IndentationError:unexpected indent

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

python闭包与装饰器的代码解释

代码&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c…

ssh 双机互信

ssh主机互信主机101.9.101.13cd /root/.ssh生成公钥私钥/usr/bin/ssh-keygen -t rsa公钥&#xff1a;id_rsa.pub 私钥&#xff1a;id_rsa把主机上生成的公钥发送给备机 用scp 不是默认端口 -P 指定端口scp -P 6802 ./id_rsa.pub root10.9.10.11:/root/.ssh/备机101.9.101.11cd …

软件测试管理工具禅道开源版下载安装

下载 下载地址&#xff1a;https://www.zentao.net/ 点击下图的开源版 根据自己的电脑配置选择相应的安装包&#xff0c;例如我的电脑是windows 64位的&#xff0c;下载中文版&#xff0c;就如下图了 安装 根据你的下载路径&#xff0c;找到并点击你下载的.exe文件&#…

关于ptype_all和pypte_base中的pt_prev的说明[转]

不知道原帖&#xff0c;我是从这里看到了&#xff0c;解决了迷惑我很久的疑问&#xff0c;抄过来。 看见noble_shi兄弟"关于net_rx_action函数的若干问题"贴中关于pt_prev的问题&#xff0c; 本来想在论坛上找到一个相关的帖子的链接告诉他。但是发现咱们论坛上关于p…

禅道的基本使用(创建项目、维护部门、用户、产品、提出需求、创建测试用例等)

禅道的基本使用一、创建项目二、创建维护部门三、添加用户四、创建产品五、提出需求六、创建测试用例禅道作为一个缺陷的管理工具&#xff0c;对于测试者来说其必不可少&#xff0c;下面将介绍禅道的基本使用 一、创建项目 登录禅道&#xff0c;点击项目&#xff0c;创建一个…

C# 延迟初始化 LazyT

概念&#xff1a;延时初始化重点是延时&#xff0c;用时加载&#xff0c;意思是对象在使用的时候创建而不是在实例化的的时候才创建。延时加载主要应用的场景&#xff1a;数据层&#xff08;ADO.NET或Entity Framework等ORM&#xff0c;Java里面的Hibernate也用到了这种技术&am…

简述get 和 post 的主要区别——计算机网络

get是从服务器获取数据&#xff0c;post是向服务器传输数据post相比get更加安全。使用get&#xff0c;在传输过程中&#xff0c;数据被放在URL中&#xff0c;而post对于所有用户来说都是不可见的。受URL的控制&#xff0c;get方式提交的数据最多只能有1024字节&#xff0c;而po…

洛谷 P1816 忠诚题解

题目描述 老管家是一个聪明能干的人。他为财主工作了整整10年&#xff0c;财主为了让自已账目更加清楚。要求管家每天记k次账&#xff0c;由于管家聪明能干&#xff0c;因而管家总是让财主十分满意。但是由于一些人的挑拨&#xff0c;财主还是对管家产生了怀疑。于是他决定用一…

禅道的使用技巧

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

java删除xml文件中尖括号之外的内容

s s.replaceAll(">[\\s].*<","><").trim();//替换\t 空格 \n s s.replaceAll("\r|\n", "");//替换掉\r\n或者\n\r 或者\r或者\n转载于:https://www.cnblogs.com/CryOnMyShoulder/p/11573841.html

mysql创建表时,表的类型与java的数据类型映射(常用)

在mysql中&#xff0c;列的类型,主要是用来约束这一列的数据类型。mysql中常用列的类型与java中的数据类型对照如下 javamysqlintINTlongBIGINTBigDecimalDECIMALBooleanBITStringVARCHARjava.util.DateDATE/DATETIMEFloatFLOATDoubleDOUBLEhttps://blog.csdn.net/hanhanwangh…

mysql用代码建表基础语法

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 创建表一、基本创建语法二、常用约束三、建表举例一、基本…

利用可视化软件navicat查看表的sql语句

1.双击你的数据表&#xff0c;右键点击最后一个对象信息 2.再点击DDL&#xff0c;我们就可以看到我们的sql语句啦

[Err] 1064 - You have an error in your SQL syntax check the manual that corresponds to 之Mysql报错

当利用navicat用sql语句建表时候&#xff0c;出现如下报错 从下图我们可以看到&#xff0c;是我们最后一行的末尾多加了一个逗号。 当我们将最后一行的逗号取消掉就正常运行了 特别注意&#xff1a;最后一行的末尾没有逗号。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢…

mysql在可视化软件navicat中如何解决中文乱码问题

报错情况 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; sql语句写好点击运行之后出现下列这样的情况&…

mysql中教如何拼接字段(列)值、加入运算、设置别名(非常实用)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 在mysql中&#xff0c;在解决实际问题的时候&#xff0c;遇…

mysql模糊查询LIKE、REGEXP(正则)的详解(在可视化工具navicat下)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录一、总结二、语法三、LIKE举例3.1"%"的用法…

Mysql在可视化工具navicat中如何解决输入小数变整数的问题,(改变小数位数)

方法一 1.点击你选中的表&#xff0c;单击设计表 2.单击字段名&#xff0c;将类型改为double&#xff0c;小数点改为你想保留的几位小数&#xff0c;最后再保存 注&#xff1a;上图中的“填充0”可勾选&#xff0c;若选中&#xff0c;有一个数字输入的时候有两位小数&#x…

Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)

目录一、概念二、举例2.1 COUNT函数2.1.1 语法2.1.2运行结果2.2 AVG函数2.2.1语法2.2.2运行结果2.3 SUM函数2.3.1语法2.3.2运行结果2.4 MAX函数2.4.1语法2.4.2运行结果2.5 MIN函数2.5.1语法2.5.2运行结果一、概念 聚合函数&#xff1a;又称分组函数、统计函数、聚集函数。在my…