传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1003

预处理出第i天到第j天走一条航线时的最短路。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. const int maxn = 105, maxm = 25, maxe = 1005;
  6.  
  7. int n, m, K, e, t1, t2, t3, dd;
  8. int head[maxm], to[maxe << 1], next[maxe << 1], w[maxe << 1], lb;
  9. int p[10005], a[10005], b[10005];
  10. char book[maxm], inq[maxm];
  11. int que[maxm], head_, tail, h, d[maxm], price[maxn][maxn];
  12. int f[maxn];
  13.  
  14. inline void ist(int aa, int ss, int ww) {
  15. to[lb] = ss;
  16. next[lb] = head[aa];
  17. head[aa] = lb;
  18. w[lb] = ww;
  19. ++lb;
  20. }
  21. inline void spfa(int start, int end) {
  22. memset(book, 0, sizeof book);
  23. for (int i = 0; i < dd; ++i) {
  24. if (a[i] <= end && b[i] >= start) {
  25. book[p[i]] = 1;
  26. }
  27. }
  28. if (book[1] || book[m]) {
  29. price[start][end] = 0x3c3c3c3c;
  30. return;
  31. }
  32. memset(que, 0, sizeof que);
  33. memset(d, 0x3c, sizeof d);
  34. memset(inq, 0, sizeof inq);
  35. head_ = tail = 0;
  36. que[tail++] = 1;
  37. inq[1] = true;
  38. d[1] = 0;
  39. while (head_ != tail) {
  40. h = que[head_++];
  41. inq[h] = 0;
  42. if (head_ == m) {
  43. head_ = 0;
  44. }
  45. for (int j = head[h]; j != -1; j = next[j]) {
  46. if (!book[to[j]] && d[to[j]] > d[h] + w[j]) {
  47. d[to[j]] = d[h] + w[j];
  48. if (!inq[to[j]]) {
  49. inq[to[j]] = 1;
  50. que[tail++] = to[j];
  51. if (tail == m) {
  52. tail = 0;
  53. }
  54. }
  55. }
  56. }
  57. }
  58. price[start][end] = d[m];
  59. }
  60.  
  61. int main(void) {
  62. //freopen("in.txt", "r", stdin);
  63. memset(next, -1, sizeof next);
  64. memset(head, -1, sizeof head);
  65. scanf("%d%d%d%d", &n, &m, &K, &e);
  66. while (e--) {
  67. scanf("%d%d%d", &t1, &t2, &t3);
  68. ist(t1, t2, t3);
  69. ist(t2, t1, t3);
  70. }
  71. scanf("%d", &dd);
  72. for (int i = 0; i < dd; ++i) {
  73. scanf("%d%d%d", p + i, a + i, b + i);
  74. }
  75.  
  76. for (int i = 1; i <= n; ++i) {
  77. for (int j = i; j <= n; ++j) {
  78. spfa(i, j);
  79. }
  80. }
  81. f[0] = -K;
  82. for (int i = 1; i <= n; ++i) {
  83. f[i] = 2147483647;
  84. for (int j = 0; j < i; ++j) {
  85. if (price[j + 1][i] < 0x3c3c3c3c) {
  86. f[i] = std::min(f[i], f[j] + price[j + 1][i] * (i - j));
  87. }
  88. }
  89. f[i] += K;
  90. }
  91. printf("%d\n", f[n]);
  92. return 0;
  93. }

  

_bzoj1003 [ZJOI2006]物流运输【预处理】的更多相关文章

  1. bzoj1003[ZJOI2006]物流运输trans

    1003: [ZJOI2006]物流运输trans Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常 ...

  2. BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)

    1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...

  3. BZOJ_1003_[ZJOI2006]物流运输_最短路+dp

    BZOJ_1003_[ZJOI2006]物流运输_最短路+dp 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 这种一段一段的显 ...

  4. 洛谷P1772 [ZJOI2006]物流运输

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

  5. [ZJOI2006]物流运输 题解

    [ZJOI2006]物流运输 时间限制: 10 Sec  内存限制: 162 MB 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个 ...

  6. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  7. [ZJOI2006]物流运输(动态规划,最短路)

    [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个 ...

  8. [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5999  Solved: 2473[Submit][Stat ...

  9. bzoj1003 [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6300  Solved: 2597[Submit][Stat ...

随机推荐

  1. eclipse bug之'<>'operator is not allowed for source level below 1.7

    eclipse中导入工程,报这个错'<>'operator is not allowed for source level below 1.7,把jdk改成1.7后,提示Android r ...

  2. IntelliJ IDEA 使用maven 集成SpringMVC+Hibernate

    准备工作: 安装idea intellij 安装jdk1.8,配好环境变量 安装tomcat 7 准备工作完成之后,就开始创建项目了 创建项目 1.File–>new project–>选 ...

  3. hduoj2094产生冠军

     产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. 图像处理之基础---opencv 开发的环境搭建

    vs2010 opencv2.4.8 下载: vs2010 http://opencv.org/ 步骤: http://my.phirobot.com/blog/2014-02-opencv_conf ...

  5. leetCode(26):Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  6. Hibernate 之 Locking

    在我们业务实现的过程中,往往会有这样的需求:保证数据访问的排他性,也就是我正在访问的数据,别人不能够访问,或者不能对我的数据进行操作.面对这样的需求,就需要通过一种机制来保证这些数据在一定的操作过程中 ...

  7. vsftp 777权限

    1. setsebool -P ftpd_disable_trans 1 2. service vsftpd restart

  8. UVA - 11488 Hyper Prefix Sets(trie树)

    1.给n个只含0.1的串,求出这些串中前缀的最大和. 例1: 0000 0001 10101 010 结果:6(第1.2串共有000,3+3=6) 例2: 01010010101010101010 1 ...

  9. android 代码优化:关闭输出日志

    android关闭日志 我们在开发时,经常会输出各种日志来debug代码.但是等到应用发布的apk运行时不希望它输出日志. 关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(), ...

  10. [NOI 2012] 美食节

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2879 [算法] 首先 , 将每种食物建一个点 , 将每位厨师做的每一道菜建一个点 建 ...