zoukankan      html  css  js  c++  java
  • P1119 灾后重建

    P1119灾后重建题解

    P1119灾后重建

    看到这道题,非常简单地想到方法(Floyd)

    然后直接实现:

    中间加入几个判断,判断路径能否通过即可。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <cstring>
    using namespace std;
    const int maxn=205;
    #define inf 0x3f3f3f3f
    const int maxx=1e9+7;
    int t[maxn],dis[maxn][maxn];
    
    int main(){
        memset(t,0x3f,sizeof t);
        int n,m;scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++){
            scanf("%d",&t[i]);
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                dis[i][j]=100005;
            }
        }
        for(int i=0;i<m;i++){
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            dis[u][v]=w;dis[v][u]=w;
        }
        int q;scanf("%d",&q);
        int now=0;
        while(q--){
            int x,y,ask;
            scanf("%d%d%d",&x,&y,&ask);
            for(;t[now]<=ask;now++){//试图降低复杂度
                for(int i=0;i<n;i++){
                    for(int j=0;j<n;j++){
                        if(i==j)continue;
                        dis[i][j]=min(dis[i][j],dis[i][now]+dis[now][j]);
                    }
                }
            }
            if(dis[x][y]>100000||t[x]>ask||t[y]>ask)printf("-1
    ");
            else printf("%d
    ",dis[x][y]);
        }
        return 0;
    }
    

    挺简单的,一会出(Floyd)

  • 相关阅读:
    P1939 【模板】矩阵加速(数列)
    NUMBER BASE CONVERSION POJ
    Raid POJ
    Genius ACM HihoCoder
    BZOJ1500: [NOI2005]维修数列 Splay维护序列
    BZOJ3245: 最快路线 拆点dijkstra
    存个头
    895E
    894E
    tarjan缩点/求桥模板
  • 原文地址:https://www.cnblogs.com/JingFenHuanZhe/p/ZaiHouChongJian1009.html
Copyright © 2011-2022 走看看