1119 灾后重建
这个题是一个比较水的蓝题,是2020夏令营时老师出的,当时不会,现在来水
这个题貌似要用最短路径进行解决
只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄,这里的时间就是路径的权值,也就是最短路径模拟就好,如果用最小生成树就时建立一条t边的树就好吧
-------------------重新------------------------
只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄
也就是 不是修边,而是重建一个点
之后有Q 个询问 (x,y,t)对于每个询问你要回答在第 t 天x到y的最短路径
也就是动态最短路
这就是一个暴力,一个模拟,一个没啥难的东西
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int tu[205][205],cj[205],n,m;
int main()
{
memset(tu,inf,sizeof(tu));
memset(cj,inf,sizeof(cj));
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>cj[i];
}
for(int i=0;i<n;i++)
tu[i][i]=0;//矩阵
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
tu[a][b]=c;
tu[b][a]=c;
}//邻接矩阵存图
int k,tt=0;
cin>>k;
for(int i=1;i<=k;i++)
{
int x,y,t;
cin>>x>>y>>t;
while(cj[tt]<=t)//时间限制
{
for(int j=0;j<n;j++)
for(int jj=0;jj<n;jj++)
tu[j][jj]=min(tu[j][tt]+tu[tt][jj],tu[j][jj]);
tt++;
}
if(tu[x][y]==inf||cj[x]>t||cj[y]>t)cout<<"-1"<<endl;//超时间了
else cout<<tu[x][y]<<endl;
}
return 0;
}