西理工校赛:PP 学姐的最短时间

2024-03-22 01:12

本文主要是介绍西理工校赛:PP 学姐的最短时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:K-PP 学姐的最短时间​​​​​​

题目大意:给n个点和m条边,给每条边通过的时间为a+b/(t+1),t为从当前点出发的时间。求从第一点到第n个点的最短时间。

思路:这题明显是求最短路的题目,那么肯定可以使用迪杰斯特拉来跑最短路,但是二个点之间通过时间是动态的,那么如何来确定这个动态时间什么时候能最小呢?在i点的时间为t,然后i到j的通过时间为a+b/(t+1),那么就是比较停留在i点的时间和b/(t+1)能够提供的节省时间比较。可以分为3种情况考虑,如果b<t+1,那么就不需要等待,多等待一秒,b/(t+1)也是0。如果t+1>sqrt(b),那么多等待一秒,b/(t+1)能减少的最多也就1秒。如果t+1<sqrt(b),那么多等待一秒,b/(t+1)肯定会减少至少1,可以等待。

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
const int N=1e6+10; 
ll h[N],e[N],ne[N],w[N],p[N],idx,d[N];
bool st[N];
void add(ll a,ll b,ll c,ll d)
{e[idx]=b,ne[idx]=h[a],w[idx]=c,p[idx]=d,h[a]=idx++;
}
ll calc(ll t,ll b)
{if(b<t+1)//第一种情况{return 0;}else//对于第二种情况,肯定不能继续等,对于第三种情况一定要继续等,那么就可以枚举sqrt(b)周围的情况来找到最小的通过时间{ll ans=1e18;for(int i=max(t,(ll)sqrt(b)-1);i<=max(t,(ll)sqrt(b)+1);i++){ans=min(ans,i-t+b/(i+1));//i是从当前点出发的时间,t是到达当前点的时间}return ans;}
}
int main()
{ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);ll n,m;cin>>n>>m;memset(h,-1,sizeof(h));while(m--){ll a,b,c,d;cin>>a>>b>>c>>d;add(a,b,c,d);add(b,a,c,d);}priority_queue<pii,vector<pii>,greater<pii>> op;op.push({0,1});memset(d,0x3f,sizeof(d));d[1]=0;while(op.size()){auto [vel,id]=op.top();op.pop();if(st[id])continue;st[id]=1;for(int i=h[id];~i;i=ne[i]){ll j=e[i],a=w[i],b=p[i];ll d1=calc(vel,b);if(d[j]>vel+d1+a){d[j]=vel+d1+a;op.push({d[j],j});}}}if(d[n]>1e17)cout<<-1;else cout<<d[n];return 0;
}

这篇关于西理工校赛:PP 学姐的最短时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834237

相关文章

2015年校赛总结

题目名为“校赛总结”,其实更想换成“Rainbow为什么五题滚粗?!”。作为今年校赛大二没拆的两个队伍之一,结果打成这样,没脸见人了,总结起来就是我认为自己今天SB了。主要有以下几点: 1.我今天状态的确不好,最后卡的那道B题跟去年在农大校赛上遇见的那题类似,在最后那段时间我已经有思路了,可是由于当时不敢写。等到最后15分钟才开始敲,加上我用很麻烦的Dijstra那种方法,调试起来好多细节要处理

哈理工新生赛热身赛解题报告

本次热身赛6道题目,由于没有官方解题报告,自己写了一个山寨版的解题报告,希望对学弟学妹有所帮助 期中两到签到题该校OJ上没有挂出,我在田大神的帮助下a掉了其它四题,解题报告如下所示 线段 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 10(6 users)Total Accepted: 7(6 users)Rating: S

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

“师创杯”校赛

不多写什么,直接写题解。 A 艺术联合会 Time Limit: 1000MS Memory limit: 65536K 题目描述 艺术联合会顾名思义就是n个画家用n种颜色一起进行艺术创作(作画)。每一位画家仅使用一种颜色,并且规定n位画家使用的颜色是不同的,这里我们可以假设第一位画家使用的颜色编号为1,第2位画家使用的颜色编号为2以此类推。每一幅画上面都有n

PP强酸强碱氮气柜和普通氮气柜的区别及共同点

PP强酸强碱氮气柜通常采用聚丙烯(PP)材料制成,聚丙烯是一种耐腐蚀性强的塑料材质,能有效抵抗强酸、强碱、盐溶液等腐蚀性物质的侵蚀,不易老化,使用寿命长。因其优秀的化学稳定性和耐腐蚀性,特别适合存储那些需要避免与外界湿气或氧气接触,并且本身可能产生或已处于强酸强碱环境中的物品。 PP强酸强碱氮气柜,柜体采用瓷白色PP板材,一体成型,经过无缝焊接处理,坚固耐用。层板同样采用PP板材,整块加强焊接,主

哈理工校赛1C题

C.长长长长龙 Time Limit: 3000 MSMemory Limit: 32768 K Total Submit: 202 (73 users)Total Accepted: 50 (46 users)Special Judge: No Description 时间:今天是20XX年,XX月,XX日。 背景:在这个科技非常发达的今天,某某大型游戏公司的全息游戏马上就要开服了

校赛 SDUT OJ2860生日Party(BFS)

题目地址:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2860 唉。。校赛的时候把这题用搜索的时间复杂度2^15次方想成了15^15次方。。。。所以没写。。。后来用的最短路的floyd算法改成了最长路做的,但有一些细节不好处理,调了会没调出来。。赛后才想到用暴搜不会超时。。于是补完线代后怒敲暴搜代码

CodeForces Round 218 D. Vessels(学姐我没用线段树系列)

这道题的意思是给你一个水塔,可以从中间任意一层倒水,告诉你每一层的容量,这一曾层满后水会流入下一层,总共有N层,再满了就直接流到地上。然后给出N个操作 操作1:往第n层中加x的水 操作2:询问每一层装有多少水 用BIT保存所剩空间的前缀和,每次加水的时候二分最终水会流到哪一层,然后加水的时候依次更新BIT,虽然式单点更新但是每一次更新都会直接把该层的空间沾满,下一次不会再更新,所以总共是O(

OD C卷 - 路口最短时间问题

路口最短时间问题 (200) 街道是棋盘型的,(十字路口)每格距离相等,车辆通过每格的街道时间均为time_per_road;十字路口有交通灯,此处车辆可直行、左转、右转,直行和左转需要等待相应T时间;右转无需等待;现给出n*m个街口的交通灯等待时间,及街口的起止坐标,计算车辆从起始到终止的最短时间;终点路口的等待时间不计入; 输入描述: 每个十字路口的等待时间(二维数组),街道通过时间,起始点

《平衡小车控制系统》电子设计大赛校赛感悟

我们学校举行了一次电子设计大赛选拔赛,虽然我们在测试的时候全部都可以完成,最后考核的时候因为方案选择问题以及各种设计逻辑等原因没能成功晋级,但我能从这次备赛中学到很多东西,遂分享一下,与广大网友交流经验。(只讲思路,代码太烂了就不提供了) 题目如下: 考察点: 基础部分:1.小车循迹 2.停车+蜂鸣器 3.控速停车 发挥部分:1.视觉云台,激光打靶 2.上下坡 3.字模识别+信息传输