欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ5047


题意概括

  概括??~别为难语文做一题错两题的我了……

  


题解

  我们发现,对于某一种装置,有c种不同的时刻的花费是不同的。

  对于s mod c不同的,花费也不一定相同。

  但是有一点是一定可以确定的:对于s1<s2,从如果可以从s1开始,一定不比s2差,因为s1可以转移到s2时刻。

  我考虑预处理一个数组gt(变量名瞎捏的),gt[i][j]表示第i个机器,从第j个时刻出发,最快可以在哪个时刻到。其中i<=m,0<=j<c[i]。

  那么显然有一个大力的m*c2的算法来求gt。注意,如果你等待c秒及以上,则一定是亏的。

  然而,实际上,我们只需要大力求解gt[i][c-1]即可,对于gt[i][j](0<=j<c-1),我们可以考虑有两种选择:一种是当前时刻转移,一种是当前时刻不转移。显然,当前时刻不转移,答案就是gt[i][j+1],当前时刻转移的话,可以直接算。所以复杂度去掉了一个2000.

  当然,用O(m*c2)的算法还是可以过去的,而O(m*c)当然可以更快。

  接下来就是大力跑SPFA就可以了。

  注意输出时候的-1.


代码

#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int N=100000+5,M=50+5,E=200000+5,T=2000+5,Inf=700000000;
struct Gragh{
int cnt,x[E],y[E],z[E],nxt[E],fst[N];
void set(){
cnt=0;
memset(fst,0,sizeof fst);
}
void add(int a,int b,int c){
x[++cnt]=a,y[cnt]=b,z[cnt]=c,nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
struct Mac{
int a,b,c,d;
}ma[M];
int n,m,e,s,gt[M][T],dis[N];
bool f[N];
queue <int> q;
int main(){
scanf("%d%d%d%d",&n,&m,&s,&e);
for (int i=1;i<=m;i++){
scanf("%d%d%d%d",&ma[i].a,&ma[i].b,&ma[i].c,&ma[i].d);
int a=ma[i].a,b=ma[i].b,c=ma[i].c,d=ma[i].d;
for (int j=0;j<c;j++)
gt[i][j]=1e9;
for (int j=0;j<c;j++){
int now=c-1+j;
gt[i][c-1]=min(gt[i][c-1],now+(a*now+b)%c+d);
}
for (int j=c-2;j>=0;j--)
gt[i][j]=min(gt[i][j+1],j+(a*j+b)%c+d);
}
g.set();
for (int i=1,a,b,c;i<=e;i++){
scanf("%d%d%d",&a,&b,&c);
g.add(a,b,c);
}
for (int i=1;i<=n;i++)
dis[i]=1e9;
memset(f,0,sizeof f);
dis[1]=s;
while (!q.empty())
q.pop();
q.push(1);
f[1]=1;
while (!q.empty()){
int x=q.front();
q.pop();
f[x]=0;
for (int i=g.fst[x];i;i=g.nxt[i]){
int y=g.y[i],z=g.z[i],mo=dis[x]%ma[z].c;
int gtime=dis[x]-mo+gt[z][mo];
if (dis[y]>gtime){
dis[y]=gtime;
if (!f[y]){
f[y]=1;
q.push(y);
}
}
}
}
for (int i=2;i<=n;i++)
if (dis[i]<Inf)
printf("%d\n",dis[i]-s);
else
printf("-1\n");
return 0;
}

  

BZOJ5047 空间传送装置 2017年9月月赛 最短路 SPFA的更多相关文章

  1. bzoj5047: 空间传送装置

    Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参 数a_i,b_i,c_i,d_i来描述.因为时空抖动的问题,在非整数时 ...

  2. BZOJ5045 打砖块 2017年9月月赛 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5045 题意概括 有一堵墙. 现在挖掉某些砖.如果有相邻的某两个砖没有了,那么他们中上方的那块也没了 ...

  3. 【BZOJ5047】空间传送装置 最短路

    [BZOJ5047]空间传送装置 Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参数a_i,b_i,c_i,d_i来描述 ...

  4. 【bzoj5047】空间传送装置 堆优化Dijkstra

    题目描述 n个点e条边的有向图,每条边是m种类型之一.第i种类型在第x时刻通过所花费的时间为$(a_i*x+b_i)\mod c_i+d_i$.可以在某个点停留.问:在s时刻从1号点出发,到达每个点所 ...

  5. 江西省移动物联网发展战略新闻发布会举行-2017年10月江西IDC排行榜与发展报告

    编者按:当人们在做技术创新时,我们在做“外包产业“:当人们在做制造产业,我们在做”服务产业“:江人们在做AI智能时,我们在做”物联网“崛起,即使有一个落差,但红色热土从不缺少成长激情. 本期摘自上月初 ...

  6. 微信公众号的分享接口,分享提示config:fail,invalid signature的解决办法(2017年12月)

    微信中打开网页,使用微信右上角菜单中自带的分享功能的经历及总结: 最开始,微信分享页面时,直接读取页面的标题(title)和页面中的第一张符合条件的图片[此种方式在2017-03-29之前管用,这一天 ...

  7. 【LGR-051】洛谷9月月赛

    [LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...

  8. csu-2018年11月月赛Round2-div2题解

    csu-2018年11月月赛Round2-div2题解 A(2193):昆虫繁殖 Description 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对 ...

  9. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

随机推荐

  1. 用命令行发布android程序

    在开发android程序的过程中,我们使用ant debug和ant installd这两个命令就够了,不涉及到APK的签名. 但是在正式发布我们的Android程序时,需要对APK签名.ant re ...

  2. js加减法运算多出很多小数点

    链接:http://www.jb51.net/article/73043.htm 解决方法:解决这种问题两种方法,第一种就是利用JavaScript 的toFixed(n) 方法,直接获取N 位小数, ...

  3. [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)

    [POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...

  4. k8s系列~docker mysql

    docker封装mysql的一些心得 简介:今天咱们来聊聊容器化mysql的一些心得 版本:Docker version 18.03 mysql 5.7.21考虑条件:  1 选好合适的docker镜 ...

  5. ProcessHacker可编译版本

    说明 做一个批量进程内搜索字符串的工具. 试了processhacker-2.39-src.zip. https://sourceforge.net/projects/processhacker/fi ...

  6. vux安装中遇到的坑

    1.输入 npm install vux --save 2.输入 npm install vux-loader --save-dev(没安装的时候,会一直报错) 3.build/webpack.bas ...

  7. 017_nginx重定向需求

    重定向的各种需求 需求一. 前端同事需要把特定的url进行重定向,实现如下: location / { root /data/base.apiportal_opsweb; index index.ht ...

  8. zabbix3.0.4导入中文模板后乱码问题处理

    通过yum安装方式部署了zabbix3.0.4监控服务器,配置过程中发现当导入的模板中有中文时,图中的中文会变成方块 如下图所示: 这个问题是由于zabbix的web端没有中文字库,我们最需要把中文字 ...

  9. iOS 8 WKWebView 知识点

    首先看看这篇文章,写得很好:http://nshipster.cn/wkwebkit/ 再推荐去看看 iOS_8_by_Tutorials 这本书里的 WKWebView相关章节! 我这里说下自己的简 ...

  10. centos7忘记登录密码修改

    很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办 第1步:开机后在内核上按“e”.截图如下 按e以后会进入内核启动页面,如下图 第2步:在linux16这行 ...