萌新求助,本地测第一个点过了,但是全WA
  • 板块P1119 灾后重建
  • 楼主_Diu_
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/9/9 21:51
  • 上次更新2023/11/4 07:12:16
查看原帖
萌新求助,本地测第一个点过了,但是全WA
310802
_Diu_楼主2021/9/9 21:51
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=210;
int n,m,q,mp[N][N];
bool b[N];
struct cxk{
	int t,x;
}a[N];
bool cmp(cxk a,cxk b){
	return a.t<b.t;
}
void Add(int k){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(mp[i][k]+mp[k][j]<mp[i][j])mp[i][j]=mp[i][k]+mp[k][j];
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)mp[i][j]=mp[j][i]=1e9;
	for(int i=1;i<=n;i++)scanf("%lld",&a[a[i].x=i].t),mp[i][i]=0;
	sort(a+1,a+n+1,cmp);
	for(int i=1,u,v,w;i<=m;i++)scanf("%lld%lld%lld",&u,&v,&w),mp[++u][++v]=mp[v][u]=w;
	scanf("%lld",&q);
	int add=1,u,v,t;
	while(q--){
		scanf("%lld%lld%lld",&u,&v,&t);
		while(add<=n&&a[add].t<=t)b[a[add].x]=1,Add(a[add++].x);
		printf("%lld\n",(mp[++u][++v]!=(int)1e9&&b[u]&&b[v]?mp[u][v]:-1));
	}
}
2021/9/9 21:51
加载中...