传送门

题目大意

有编号1~n的星球,在不用的星球间共有m个传送门,任意两个星球间传送门不超过1个,每个传送门需要花费一定的时间,但是在某时刻会在某星球有旅客到达,这时要一定等到没有旅客到达的时候才能出发,问从1走到n最少花费时间是多少。

分析

首先我们先考虑一个贪心策略,如果到达点i的时间有a和b(a<b),则从i出发前往n的途中使用时间为a的这一方案一定更优,即不存在一种情况使得某个点先到达的最终结果比后到达的坏,原因易证。然后计算最短路就可以了。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int inf = 0x3f3f3f3f;
vector<pair<int,int> >v[];
priority_queue<pair<int,int> >q;
map<int,int>is[];
int d[],vis[];
inline int wh(int id,int time){
int res=,i;
for(i=time;i<=;i++)
if(is[id][i])res++;
else break;
return res;
}
int main(){
int n,m,i,j,k;
scanf("%d%d",&n,&m);
for(i=;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
for(i=;i<=n;i++){
int t,x;
scanf("%d",&t);
for(j=;j<=t;j++){
scanf("%d",&x);
is[i][x]=;
}
}
memset(d,0x3f,sizeof(d));
d[]=;
q.push(make_pair(,));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(x==n)break;
if(vis[x])continue;
vis[x]=;
d[x]+=wh(x,d[x]);
for(i=;i<v[x].size();i++){
int y=v[x][i].first,z=v[x][i].second;
if(d[y]>d[x]+z){
d[y]=d[x]+z;
q.push(make_pair(-d[y],y));
}
}
}
if(d[n]>=inf)puts("-1");
else printf("%d\n",d[n]);
return ;
}

最新文章

  1. 用java解析字符串,如字符串&quot;(1+2/5)*3&quot;当成是数值表达式,进行计算出结果来
  2. JqueryEasyUI之DataGrid扩展
  3. ubuntu 安装phpstorm
  4. node.js基础 1之 URL网址解析的好帮手
  5. Dynamics AX for Retail POS Development blogs
  6. switch为什么不能用string类型?
  7. debian 颜色设置
  8. char[]转换成wchar_t的转换方法(GNU Libc规定wchar_t为32位)
  9. sql还原(.sql文件还原)
  10. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
  11. HTTP协议知多少-关于http1.x、http2、SPDY的相关知识
  12. 瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java
  13. IDEA使用教程
  14. Java基础-递归调用
  15. Numpy 基础运算2
  16. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)
  17. 获取的是 string 类型的字段,直接输出 数字 或者 需要的第几行
  18. Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D) - 记忆化搜索
  19. C# 异常语句 跳转语句 while循环 穷举法 迭代法
  20. [Git] Change the commit message of my last commit

热门文章

  1. CodeForces - 961D:Pair Of Lines (几何,问两条直线是否可以覆盖所有点)
  2. linux大于2T的磁盘格式化
  3. [BZOJ1022][SHOI2008]小约翰的游戏
  4. untra edit 显示文件函数列表
  5. WPF案例:如何设计搜索框(自定义控件的原则和方法)
  6. Azure VM从ASM迁移到ARM(二)
  7. type命令
  8. Java-API:java.util.map
  9. IIS:配置参数
  10. ruby中nil?, empty? and blank?