zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    luogu P3398 仓鼠找sugar
    关于lca
    luogu P3374 【模板】树状数组 1
    [NOIp2013普及组]车站分级
    [HDU1598]find the most comfortable road
    [NOI2015]程序自动分析
    [USACO08DEC]Secret Message
    [洛谷3375]【模板】KMP字符串匹配
    [ZJOI2010]网络扩容
    [SCOI2007]修车
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6813104.html
Copyright © 2011-2022 走看看