题解代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;

const int N=256;

const int MAXN=1e6+128;

int GN;//linear_map

int time_line[MAXN];//表示N号村庄完成重建时间

int n,m;



inline void init()
{
    scanf(" %d %d",&n,&m);
    for(int i=0;i<n;i++)
    {
        int t;scanf(" %d",&t);
        time_line[i]=t;
    }
    memset(G,0x3f,sizeof(G));
    for(int i=1;i<=m;i++)
    {
        int f,t,d;
        scanf(" %d %d %d",&f,&t,&d);
        Gt=Gf=d;
    }
}

inline void floyd(int x)//x村庄可以通车
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            Gi=min(Gi+Gx,Gi);
}

inline void enter_solve()
{
    int now=0;
    int Q;
    scanf(" %d",&Q);
    while(Q--)
    {
        int x,y,t;
        scanf(" %d %d %d",&x,&y,&t);
        while(time_line[now]<=t && now<n)
        {
            floyd(now); //让now 通车
            now++;
        }
        if(Gx!=0x3f3f3f3f && now > x && now > y)   //x,y必须也完成重建
            printf("%dn",Gx);
        else
            printf("-1n");
    }
}

int main()
{
    init();
    enter_solve();
}

Last modification:April 16th, 2021 at 09:26 pm