BZOJ5047 空间传送装置 2017年9月月赛 最短路 SPFA
欢迎访问~原文出处——博客园-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的更多相关文章
- bzoj5047: 空间传送装置
Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参 数a_i,b_i,c_i,d_i来描述.因为时空抖动的问题,在非整数时 ...
- BZOJ5045 打砖块 2017年9月月赛 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5045 题意概括 有一堵墙. 现在挖掉某些砖.如果有相邻的某两个砖没有了,那么他们中上方的那块也没了 ...
- 【BZOJ5047】空间传送装置 最短路
[BZOJ5047]空间传送装置 Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参数a_i,b_i,c_i,d_i来描述 ...
- 【bzoj5047】空间传送装置 堆优化Dijkstra
题目描述 n个点e条边的有向图,每条边是m种类型之一.第i种类型在第x时刻通过所花费的时间为$(a_i*x+b_i)\mod c_i+d_i$.可以在某个点停留.问:在s时刻从1号点出发,到达每个点所 ...
- 江西省移动物联网发展战略新闻发布会举行-2017年10月江西IDC排行榜与发展报告
编者按:当人们在做技术创新时,我们在做“外包产业“:当人们在做制造产业,我们在做”服务产业“:江人们在做AI智能时,我们在做”物联网“崛起,即使有一个落差,但红色热土从不缺少成长激情. 本期摘自上月初 ...
- 微信公众号的分享接口,分享提示config:fail,invalid signature的解决办法(2017年12月)
微信中打开网页,使用微信右上角菜单中自带的分享功能的经历及总结: 最开始,微信分享页面时,直接读取页面的标题(title)和页面中的第一张符合条件的图片[此种方式在2017-03-29之前管用,这一天 ...
- 【LGR-051】洛谷9月月赛
[LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...
- csu-2018年11月月赛Round2-div2题解
csu-2018年11月月赛Round2-div2题解 A(2193):昆虫繁殖 Description 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对 ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
随机推荐
- writen.c
#include <unistd.h> #include <errno.h> ssize_t writen(int fd, const void *vptr, size_t n ...
- 理解django框架中的MTV与MVC模式
1.Models:一个抽象层,用来构建和操作你的web应用中的数据,模型是你的数据的唯一的.权威的信息源.它包含你所储存数据的必要字段和行为.通常,每个模型对应数据库中唯一的一张表. from dja ...
- 2、Saltstack的数据系统
一.Grains grains是salt用来收集minion端底层系统信息的接口.比如,操作系统type.域名 .IP地址.内存及其他相关系统属性信息等.存储在minion端,用于保存minion ...
- Cpp读文件、CString转String、String转CString
场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- 没有备份怎么恢复被drop的表(利用undrop-for-innodb)
介绍: 也许大家都难以理解,这么重要的数据为啥不备份(或者备份不可用)?而且还任性的drop table了.显然有备份是最好的,但是它们并不总是可用的.这种情况令人恐惧,但并非毫无希望.在许多 ...
- jvm系列五、jvm垃圾回收机制、jvm各种参数及调优
转载自:http://yufenfei.iteye.com/blog/1746914 尊重原创. 一.GC有两种类型:Scavenge GC 和Full GC 1.Scavenge GC 一般情况下, ...
- Salt Document学习笔记1
原文来自Salt Documentation,作者是 Thomas Hatch),我摘抄部分可能今后会用到或适合入门到精通的一些原文段落,简单翻译后发上来,便于查阅和研究 一.原理方面:The net ...
- centos7的安装主要步骤选择
选择语言,选择英语 选择时区done确认选择 安全策略,选择默认 安装源文件 软件包选择,此处选择 最小安装 选择磁盘,并分区
- Android天气预报
Android天气预报 1.指定 WebService 的命名空间和调用方法import org.ksoap2.serialization.SoapObject;private static fina ...