萌新求助,FloydT了6个点
查看原帖
萌新求助,FloydT了6个点
349581
qytqytqy楼主2021/8/11 21:26

RT

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<memory.h>
using namespace std;
int n,k,m,q,l,o,p,idx;
int a[500][500],t[1000005];
bool v[1000005]={false};
void floyd(int x)
{
	for(register int i=0;i<n;i++)
	{
		for(register int j=0;j<n;j++)
		a[i][j]=min(a[i][j],a[i][x]+a[x][j]);
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	scanf("%d%d",&n,&m);
	for(register int i=0;i<n;i++)
	{
		for(register int j=0;j<n;j++)
		{
			if(i==j) a[i][j]=0;
			else a[i][j]=0x3f3f3f3f;
		}
	}
	for(register int i=0;i<n;++i) scanf("%d",&t[i]);
	for(register int i=1;i<=m;++i) 
	{
		int u,v,z;
		scanf("%d%d%d",&u,&v,&z);
		a[u][v]=a[v][u]=z;
	}
	scanf("%d",&q);
	while(q--)
	{
		int aa,b,c;
		int cnt=0;
		scanf("%d%d%d",&aa,&b,&c);
		while(t[cnt]<=c&&cnt<n)
	    {
	    	floyd(cnt);
	    	cnt++;
		}
		if(t[aa]>c||t[b]>c||a[aa][b]==0x3f3f3f3f) puts("-1");
		else printf("%d\n",a[aa][b]);
	}
	return 0;
}
2021/8/11 21:26
加载中...