【牛客 - 283H】图论一顿套模板(思维转化,Dijkstra)
题干:
由于临近广西大学建校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)相关推荐
- 牛客竞赛36签到题A(思维)
//第一题签到(第一次做牛客的诶) 链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...
- 【牛客 - 1080C】tokitsukaze and Soldier(思维,偏序问题)
题干: 链接:https://ac.nowcoder.com/acm/contest/1080/C 来源:牛客网 在一个游戏中,tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本. ...
- 2021牛客多校3 - Black and white(思维+最小生成树)
题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,初始时都是白色,可以花费掉 cost[i][j]cost[i][j]cost[i][j] 将格子 (i,j)(i,j)(i,j) 染 ...
- 牛客 - 丁姐姐喜欢Fibonacci(找规律+思维)
题目链接:点击查看 题目大意:给出一个正整数n,求第n项斐波那契数列的奇偶性 题目分析:这个题..看到1e15的数据范围,第一反应就是去敲一个矩阵快速幂的模板,但发现题目没有给取模范围,所以还用不了矩 ...
- 数论分块 ---- 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 ...
- 牛客 - 牛牛的滑动窗口(单调栈+思维+差分)
题目链接:点击查看 题目分析:给出 nnn 个数,定义滑动窗口的贡献是其中最大值与最小值的乘积,现在问对于长度分别为 [1,n][1,n][1,n] 的滑动窗口,贡献之和分别是多少 题目分析:考虑暴力 ...
- 【牛客 - 185A】无序组数 (思维,数学,因子个数)
题干: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 给出一个二元组(A,B) 求出无序 ...
- 牛客第三场 F Popping Balloons —— 思维 + 搞题
题目链接:点我啊╭(╯^╰)╮ 题目大意: 二维平面,nnn 个气球 要求水平方向射三枪,垂直射三枪 每一枪可以打穿一行或一列的所有气球 水平或垂直的相邻枪的距离为 rrr ...
- 牛客练习赛41 D.最小相似度(思维+bfs)
传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...
最新文章
- 洛谷P1433 吃奶酪【dfs】【剪枝】
- L2-005 集合相似度 (25分)
- Android Retrofit框架请求复杂json数据
- 下载离线地图数据并搭建离线地图开发环境(一套代码支持谷歌、百度、高德等所有地图源)
- 小程序云开发——列表页和详情页
- AsPack压缩工具
- 从新一期技术雷达看技术领域最新趋势
- win10无法访问ubuntu共享文件夹(smbd出错排查)
- 作为程序员,应该更关注代码质量还是只需要完成功能就好了?
- windows如何查看内存条型号信息cpu型号信息 # 包括 内存条个数 和 cpu个数
- 《k3s 源码解析3 ---- k3s集群搭建》
- php如何连接数据库 甲骨文,Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8 – 让我们荡起双桨的博客 – CSDN博客...
- 俞敏洪在北京大学2008年开学典礼上的演讲辞
- linux不启动修改rcs文件,Linux启动脚本rcS
- mysql4.0事务_聊一聊 MySQL 中的事务及其实现原理
- //4.判断一个字符串是否为另外一个字符串旋转之后的字符串。 //例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0. //AABCD左旋
- linux命令之more命令
- vscode中安装python运行调试环境
- LeetCode 221. Maximal Square (最大正方形)
- 济南公交车辆实时定位手机web版
热门文章
- 从决策树到xgboost(二)
- 151. Reverse Words in a String
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御
- [Leetcode][LCP 19][JAVA][秋叶收藏集][动态规划]
- [剑指offer]面试题第[58-2]题[JAVA][左旋转字符串][拼接]
- 如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)
- 987C. Three displays
- ffmpeg php linux,linux(php环境) 安装ffmpeg
- c语言编程怎么实现替换,使用C语言实现字符串中子字符串的替换
- java写一个web聊天工具_javaweb写的在线聊天应用