题干:

由于临近广西大学建校90周年校庆,西大开始了喜闻乐见的校园修缮工程!

然后问题出现了,西大内部有许许多多的道路,据统计有N栋楼和M条道路(单向),每条路都有“不整洁度”W,现在校方想知道从S楼到T楼的所有路径中,“不整洁度”乘积最小是多少。

由于答案可能很大,所以你需要将最后的答案109+7取模

输入描述:

第一行为四个整数N、M、S、T,意义如上。

第2至第M+1行每行表示一条道路,有三个整数,分别表示每条道路的起点u,终点v和“不整洁度”W。

输入保证没有自环,可能有重边。

其中W一定是2的整数次幂。

输出描述:

输出一个整数,表示最小的不整洁度之乘积对109+7取模的结果。

若无解请输出 -1

示例1

输入

复制

4 4 1 3
1 2 8
1 3 65536
2 4 2
4 3 16

输出

复制

256

解题报告:

把乘法转化成加法就可以跑Dijkstra了。。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
struct Edge {int to;int ne;ll w;
} e[MAX];
struct Point {int o;ll c;Point(){}Point(int o,ll c):o(o),c(c){}friend bool operator <(const Point & a,const Point & b) {return a.c > b.c;}
};
const ll INF = 0x3f3f3f3f3f3f;
const ll mod = 1e9 + 7;
int n,m,s,t;
int tot;
int head[MAX];
ll dis[MAX];
bool vis[MAX];
void add(int x,int y,ll w) {e[++tot].to = y;e[tot].w = w;e[tot].ne = head[x];head[x] = tot;
}
ll qpow(ll a,ll k) {ll res = 1;while(k) {if(k&1) res = (res * a) % mod;k>>=1;a = (a*a)%mod;}return res % mod;
}
void Dijkstra() {for(int i = 1; i<=n; i++) dis[i] = INF;memset(vis,0,sizeof vis);dis[s] = 0;priority_queue<Point> pq;pq.push(Point(s,0));while(!pq.empty()) {Point cur = pq.top();pq.pop(); if(vis[cur.o]) continue;vis[cur.o]=1;for(int i = head[cur.o]; i!=-1; i=e[i].ne) {//if(vis[cur.o]) continue;if(e[i].w + dis[cur.o] < dis[e[i].to]) {dis[e[i].to] = e[i].w + dis[cur.o];pq.push(Point(e[i].to,dis[e[i].to]));}}}}int main()
{ll c;memset(head,-1,sizeof head);cin>>n>>m>>s>>t;for(int i = 1,a,b; i<=m; i++) {scanf("%d%d%lld",&a,&b,&c);ll tmp = (ll)log2(c);add(a,b,tmp);}Dijkstra();if(dis[t] == INF) puts("-1");else printf("%lld\n",qpow(2,dis[t]%mod));return 0 ;}

【牛客 - 283H】图论一顿套模板(思维转化,Dijkstra)相关推荐

  1. 牛客竞赛36签到题A(思维)

    //第一题签到(第一次做牛客的诶) 链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  2. 【牛客 - 1080C】tokitsukaze and Soldier(思维,偏序问题)

    题干: 链接:https://ac.nowcoder.com/acm/contest/1080/C 来源:牛客网 在一个游戏中,tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本. ...

  3. 2021牛客多校3 - Black and white(思维+最小生成树)

    题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,初始时都是白色,可以花费掉 cost[i][j]cost[i][j]cost[i][j] 将格子 (i,j)(i,j)(i,j) 染 ...

  4. 牛客 - 丁姐姐喜欢Fibonacci(找规律+思维)

    题目链接:点击查看 题目大意:给出一个正整数n,求第n项斐波那契数列的奇偶性 题目分析:这个题..看到1e15的数据范围,第一反应就是去敲一个矩阵快速幂的模板,但发现题目没有给取模范围,所以还用不了矩 ...

  5. 数论分块 ---- 2020牛客多校第7场H-Dividing[思维+数论分块]

    题目大意: 解题思路:很明显满足条件的点是n%k==0∣∣n%k==1n\%k==0||n\%k==1n%k==0∣∣n%k==1 1.因为nnn是从111开始的如果一直乘以k[n=n∗k]k[n=n ...

  6. 牛客 - 牛牛的滑动窗口(单调栈+思维+差分)

    题目链接:点击查看 题目分析:给出 nnn 个数,定义滑动窗口的贡献是其中最大值与最小值的乘积,现在问对于长度分别为 [1,n][1,n][1,n] 的滑动窗口,贡献之和分别是多少 题目分析:考虑暴力 ...

  7. 【牛客 - 185A】无序组数 (思维,数学,因子个数)

    题干: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 给出一个二元组(A,B) 求出无序 ...

  8. 牛客第三场 F Popping Balloons —— 思维 + 搞题

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 二维平面,nnn 个气球     要求水平方向射三枪,垂直射三枪     每一枪可以打穿一行或一列的所有气球     水平或垂直的相邻枪的距离为 rrr   ...

  9. 牛客练习赛41 D.最小相似度(思维+bfs)

    传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali​是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...

最新文章

  1. 洛谷P1433 吃奶酪【dfs】【剪枝】
  2. L2-005 集合相似度 (25分)
  3. Android Retrofit框架请求复杂json数据
  4. 下载离线地图数据并搭建离线地图开发环境(一套代码支持谷歌、百度、高德等所有地图源)
  5. 小程序云开发——列表页和详情页
  6. AsPack压缩工具
  7. 从新一期技术雷达看技术领域最新趋势
  8. win10无法访问ubuntu共享文件夹(smbd出错排查)
  9. 作为程序员,应该更关注代码质量还是只需要完成功能就好了?
  10. windows如何查看内存条型号信息cpu型号信息 # 包括 内存条个数 和 cpu个数
  11. 《k3s 源码解析3 ---- k3s集群搭建》
  12. php如何连接数据库 甲骨文,Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8 – 让我们荡起双桨的博客 – CSDN博客...
  13. 俞敏洪在北京大学2008年开学典礼上的演讲辞
  14. linux不启动修改rcs文件,Linux启动脚本rcS
  15. mysql4.0事务_聊一聊 MySQL 中的事务及其实现原理
  16. //4.判断一个字符串是否为另外一个字符串旋转之后的字符串。 //例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0. //AABCD左旋
  17. linux命令之more命令
  18. vscode中安装python运行调试环境
  19. LeetCode 221. Maximal Square (最大正方形)
  20. 济南公交车辆实时定位手机web版

热门文章

  1. 从决策树到xgboost(二)
  2. 151. Reverse Words in a String
  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御
  4. [Leetcode][LCP 19][JAVA][秋叶收藏集][动态规划]
  5. [剑指offer]面试题第[58-2]题[JAVA][左旋转字符串][拼接]
  6. 如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)
  7. 987C. Three displays
  8. ffmpeg php linux,linux(php环境) 安装ffmpeg
  9. c语言编程怎么实现替换,使用C语言实现字符串中子字符串的替换
  10. java写一个web聊天工具_javaweb写的在线聊天应用