• [luoguP1119] 灾后重建(Floyd)


    传送门

    基于Floyd的动态规划原理,我们可以只用进行一次Floyd。

    而题目给出的限制条件相当于给Floyd加了时间限制而已。

    还是得靠对Floyd的理解。

    ——代码

     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 const int MAXN = 201, INF = 23333333;
     7 int n, m, q;
     8 int t[MAXN], dis[MAXN][MAXN], qx[50001], qy[50001], qt[50001];
     9 
    10 int main()
    11 {
    12     int i, j, k = 0, x, y, l, z;
    13     scanf("%d %d", &n, &m);
    14     for(i = 0; i < n; i++) scanf("%d", &t[i]);
    15     t[n] = INF;
    16     for(i = 0; i < n; i++)
    17         for(j = 0; j < n; j++)
    18             dis[i][j] = INF * (i != j);
    19     for(i = 1; i <= m; i++)
    20     {
    21         scanf("%d %d %d", &x, &y, &z);
    22         dis[x][y] = dis[y][x] = z;
    23     }
    24     scanf("%d", &q);
    25     for(i = 1; i <= q; i++) scanf("%d %d %d", &qx[i], &qy[i], &qt[i]);
    26     for(l = 1; l <= q; l++)
    27     {
    28         while(t[k] <= qt[l])
    29         {
    30             for(i = 0; i < n; i++)
    31                 for(j = 0; j < n; j++)
    32                     dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
    33             k++;
    34         }
    35         if(t[qx[l]] > qt[l] || t[qy[l]] > qt[l] || dis[qx[l]][qy[l]] == INF) printf("-1
    ");
    36         else printf("%d
    ", dis[qx[l]][qy[l]]);
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    border-radius
    border-style
    border-width
    border
    max-width
    min-width
    clip 语法
    left
    z-index
    position
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6813104.html
Copyright © 2020-2023  润新知