2118: 墨墨的等式 最短路
2016-03-20 08:04
253 查看
好题
既然是好题,那么我肯定不会做。
既然不会做,那就上网找题解吧。
膜Oxer神犇
突然发现还不如我去年写的spfa快
既然是好题,那么我肯定不会做。
既然不会做,那就上网找题解吧。
膜Oxer神犇
突然发现还不如我去年写的spfa快
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define inf 10000000000000000ll #define intinf 1000000007 #define N 500005 #define M 6000005 using namespace std; int n,m,cnt,mn=intinf; long long BMin,BMax; long long dis ; int head ,list[M],next[M],key[M],a[20]; bool vis ; inline long long read() { long long a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } inline void insert(int x,int y,int z) { next[++cnt]=head[x]; head[x]=cnt; list[cnt]=y; key[cnt]=z; } inline void dijkstra() { priority_queue<pair<long long,int>,vector<pair<long long,int> >,greater<pair<long long,int> > > q; for (int i=1;i<mn;i++) dis[i]=inf; q.push(make_pair(0,0)); while (!q.empty()) { int x=q.top().second; q.pop(); if (vis[x]) continue; vis[x]=true; for (int i=head[x];i;i=next[i]) if (dis[x]+key[i]<dis[list[i]]) { dis[list[i]]=dis[x]+key[i]; q.push(make_pair(dis[list[i]],list[i])); } } } int main() { n=read(); BMin=read()-1; BMax=read(); for (int i=1;i<=n;i++) a[i]=read(),mn=min(a[i],mn); for (int i=0;i<mn;i++) for (int j=1;j<=n;j++) insert(i,(i+a[j])%mn,a[j]); dijkstra(); long long ans=0; for (int i=0;i<mn;i++) { if (dis[i]<=BMin) ans-=(BMin-dis[i])/mn+1; if (dis[i]<=BMax) ans+=(BMax-dis[i])/mn+1; } cout << ans << endl; return 0; }
相关文章推荐
- C 实现socket 数据互传
- 96.老鼠的旅行(动态规划)
- Mybatis基本应用实现增删改查
- Android之弹出/隐藏系统软键盘
- 电脑爱好者GHOSTWIN7纯净版V3.0
- 第15课:RDD创建内幕彻底解密学习笔记
- C#完整执行存储过程的代码加实例
- 巧解如何声明函数指针以及函数返回值是函数指针的函数指针
- Android中弹出输入法界面不影响app界面布局
- 堆栈
- 不要在linux上启用net.ipv4.tcp_tw_recycle参数
- 学习进度条 第三周
- 2721: [Violet 5]樱花|约数个数
- 各种排序算法总结
- [leetcode] 158. Read N Characters Given Read4 II - Call multiple times 解题报告
- ASP.NET web 应用程序项目
- Linux管道的作用--管道命令在脚本中的使用
- sublime text 在ubuntu下无权限修改/var/www/文件
- 重新想,重新看——CSS3变形,过渡与动画④
- OSChina 周日乱弹 ——已经打码请放心观看