题目

BOSS送给小唐一辆车。小唐开着这辆车从PKU出发去ZJU上课了。

众所周知,天朝公路的收费站超多的。经过观察地图,小唐发现从PKU出发到ZJU的所有路径只会有N(2<=N<=300)个不同的中转点,其中有M(max(0, N-100) <=M<=N)个点是天朝的收费站。N个中转点标号为1…N,其中1代表PKU,N代表ZJU。中转点之间总共有E(E<=50,000)条双向边连接。

每个点还有一个附加属性,用0/1标记,0代表普通中转点,1代表收费站。当然,天朝的地图上面是不会直接告诉你第i个点是普通中转点还是收费站的。地图上有P(1<=P<=3,000)个提示,用[u, v, t]表示:[u, v]区间的所有中转点中,至少有t个收费站。数据保证由所有标记得到的每个点的属性是唯一的。

车既然是BOSS送的,自然非比寻常了。车子使用了世界上最先进的DaxiaYayamao引擎,简称DY引擎。DY引擎可以让车子从U瞬间转移到V,只要U和V的距离不超过L(1<=L<=1,000,000),并且U和V之间不能有收费站(小唐良民一枚,所以要是经过收费站就会停下来交完钱再走)。

DY引擎果然是好东西,但是可惜引擎最多只能用K(0<=K<=30)次。

分析

这道题的难点主要在求出哪个点有收费站。

可以把题目分成两部分:

求出哪个点有收费站

这部分用到个很神奇的东西,差分约束系统

设\(s_{i}\)表示在中转点1~i有多少个收费站,

那么对于每个提示[u,v,t],

\(s_{v}-s_{u-1}>=c\),移项得\(s_{u-1}-s_{v}<=-c\)。

但这不足以求出所有的\(s\)值,那么注意隐藏条件:

\(s_{i}-s_{i-1}>=0\),移项得\(s_{i-1}-s_{i}<=0\)

\(s_{i}-s_{i-1}<=1\)

接着对于一条式子“a-b<=c”,给b向a连一条权值为c的有向边,搞一遍spfa就可以了(其中\(s_{n}=m\),显然嘛)

求最短路

先把原图分为k+1层,

搞一遍floyd,求出可以瞬移的路径,

每一层连一条可以瞬移的路径到下一层。

spfa完美收场。

  1. #include <cmath>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <algorithm>
  7. #include <queue>
  8. const long long maxlongint=21474836470000;
  9. using namespace std;
  10. long long next[2000000],last[2000000],to[2000000],v[2000000],dis[2000000],d[5000000],f[400][400],re[60000][4];
  11. long long a[400][400];
  12. long long n,m,ans,k,l,e,tot;
  13. bool bz[2000000];
  14. long long bj(long long x,long long y,long long z)
  15. {
  16. next[++tot]=last[x];
  17. last[x]=tot;
  18. to[tot]=y;
  19. v[tot]=z;
  20. }
  21. long long spfa(long long x,long long y)
  22. {
  23. memset(bz,true,sizeof(bz));
  24. memset(dis,60,sizeof(dis));
  25. long long head=0,tail=1,g;
  26. dis[x]=y;
  27. d[1]=x;
  28. while(head<tail)
  29. {
  30. g=d[++head];
  31. bz[g]=true;
  32. for(long long i=last[g];i;i=next[i])
  33. {
  34. long long j=to[i];
  35. if(dis[j]>dis[g]+v[i])
  36. {
  37. dis[j]=dis[g]+v[i];
  38. if(bz[j])
  39. {
  40. bz[j]=false;
  41. d[++tail]=j;
  42. }
  43. }
  44. }
  45. }
  46. }
  47. int main()
  48. {
  49. //第一部分
  50. long long o;
  51. scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&e,&o,&l,&k);
  52. memset(f,60,sizeof(f));
  53. for(long long i=1;i<=e;i++)
  54. {
  55. long long x,y,z;
  56. scanf("%lld%lld%lld",&x,&y,&z);
  57. re[i][1]=x;
  58. re[i][2]=y;
  59. re[i][3]=z;
  60. f[x][y]=min(z,f[x][y]);
  61. f[y][x]=f[x][y];
  62. }
  63. for(long long i=1;i<=o;i++)
  64. {
  65. long long x,y,z;
  66. scanf("%lld%lld%lld",&x,&y,&z);
  67. bj(y,x-1,-z);
  68. }
  69. for(long long i=2;i<=n;i++)
  70. {
  71. bj(i,i-1,0);
  72. bj(i-1,i,1);
  73. }
  74. spfa(n,m);
  75. //第二部分
  76. memset(last,0,sizeof(last));
  77. tot=0;
  78. for(long long i=1;i<=e;i++)
  79. {
  80. for(long long p=0;p<=k;p++)
  81. {
  82. bj(p*n+re[i][1],p*n+re[i][2],re[i][3]);
  83. bj(p*n+re[i][2],p*n+re[i][1],re[i][3]);
  84. }
  85. }
  86. for(long long i=1;i<=n;i++)
  87. for(long long j=1;j<=n;j++)
  88. {
  89. for(long long p=1;p<=n;p++)
  90. if(i!=j && j!=p && i!=p && dis[p]-dis[p-1]==0 && dis[p]<=m)
  91. {
  92. if(f[i][p]+f[p][j]<f[i][j])
  93. f[i][j]=f[i][p]+f[p][j];
  94. }
  95. }
  96. for(long long i=1;i<=n;i++)
  97. for(long long j=1;j<=n;j++)
  98. if(i!=j && f[i][j]<=l)
  99. {
  100. for(long long p=0;p<=k-1;p++)
  101. {
  102. bj(p*n+i,(p+1)*n+j,0);
  103. }
  104. }
  105. spfa(1,0);
  106. ans=maxlongint;
  107. for(long long i=0;i<=k;i++)
  108. ans=min(dis[i*n+n],ans);
  109. printf("%lld\n",ans);
  110. }

【NOIP2013模拟】DY引擎的更多相关文章

  1. 【NOIP2013模拟】终极武器(经典分析+二分区间)

    No.2. [NOIP2013模拟]终极武器 题意: 给定你一些区间,然后让你找出\(1\sim 9\)中的等价类数字. 也就是说在任何一个区间里的任何一个数,把其中后\(k\)位中的某一位换成等价类 ...

  2. JZOJ 3493. 【NOIP2013模拟联考13】三角形

    3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...

  3. JZOJ 3487. 【NOIP2013模拟联考11】剑与魔法(dragons)

    3487. [NOIP2013模拟联考11]剑与魔法(dragons) (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  De ...

  4. JZOJ 3470. 【NOIP2013模拟联考8】最短路(path)

    470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  5. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

    3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limi ...

  6. JZOJ 3463. 【NOIP2013模拟联考5】军训

    3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Deta ...

  7. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  8. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  9. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

随机推荐

  1. fiddler之模拟请求超时和弱网模式

    在针对手机端测试时,很多情况下我们需要测试响应超时和弱网情况的响应情况.此时可以使用fiddler提供的断点和弱网功能进行测试. 1.请求超时 设置断点,是请求响应超时.查看请求结果. Rules-- ...

  2. cocos2dx基础篇(16) 基本绘图DrawPrimitives

    [3.x] (1)去掉前缀 "cc" (2)将 ccDraw***() 封装到了 DrawPrimitives 命名空间中. (3)重写绘图函数:         draw(Ren ...

  3. python并发编程之进程池、线程池、协程

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  4. cdh平台问题

    问题背景:内容的不懂之处,可以私信博主.友好交流使用.主要针对的问题种类有:网络桥接报错.网卡文件问题(该问题主要看你的安装脚本文件里面写的是否和主机对应,也是运行环境的问题).scm表中没有节点信息 ...

  5. 虚拟机上首次安装Ubuntu后 root密码设置

    虚拟机下安装ubuntu后root密码设置 问题描述: 在虚拟机下安装了ubuntu中要输入用户名,一般情况下大家都会输入一个自己的网名或绰号之类的,密码也在这时设置过了. 但是当安装成功之后,使用命 ...

  6. Java - PhantomJS + EChartsConvert实现ECharts图片保存到服务端

    1.所需工具 1>phantomjs:官网下载http://phantomjs.org/download.html 国内镜像http://npm.taobao.org/dist/phantomj ...

  7. Mybatis-学习笔记(8)常用的注解

    1.常用的注解. 2.@insert.@delete.@update.@select完成常见的CRUD操作. import java.util.List; import org.apache.ibat ...

  8. Mybatis-学习笔记(6)Mybatis的事务管理机制

    1.什么是事务. 多个数据库原子访问应该被绑定成一个整体,这就是事务.事务是一个最小的逻辑执行单元,整个事务不能分开执行,要么同时执行,要么同时放弃执行. 事务的4个特性:原子性.一致性.隔离性.持续 ...

  9. [Codeforces 1214A]Optimal Currency Exchange(贪心)

    [Codeforces 1214A]Optimal Currency Exchange(贪心) 题面 题面较长,略 分析 这个A题稍微有点思维难度,比赛的时候被孙了一下 贪心的思路是,我们换面值越小的 ...

  10. jquery中的插件EChars的使用

    首先,进入EChars的官网下载页面:http://echarts.baidu.com/download.html    下载自己需要的版本. 引入jquery包和echars,进入官网的实例:htt ...