萌新求助,为啥全T
查看原帖
萌新求助,为啥全T
206833
David207楼主2020/7/29 09:12

代码如下,能过样例

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAX=0x7f7f7f;
ll tt[201],d[201][201],t,n,m,a,b,w,Q,x,y,ttt=-1;
bool f,v[201][201];
void print(ll x,ll y)
{
	if(f==0)
	{
		if(d[x][y]==MAX||d[y][x]==MAX)
		{
			printf("-1");
			f=1;
			return;
		}
		printf("%lld",d[x][y]);
		f=1;
		return;
	}
	if(d[x][y]==MAX||d[y][x]==MAX)
	{
		printf("\n-1");
		f=1;
		return;
	}
	printf("\n%lld",d[x][y]);
}
void F(ll x,ll y)
{
	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n;i++)
		{
			if(k!=i)
			{
				for(int j=0;j<n;j++)
				{
					if(i!=j&&k!=j&&d[i][k]+d[k][j]<d[i][j]&&v[i][k]==true&&v[i][j]==true&&v[k][j]==true)
					{
						d[i][j]=d[i][k]+d[k][j];
					}
				}
			}
		}
	}
	print(x,y);
}
int main()
{
	freopen("rebuild.in","r",stdin);
	freopen("rebuild.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			d[i][j]=MAX;
		}
	}
	for(int i=0;i<n;i++)
	{
		scanf("%lld",&tt[i]);
	}
	for(int i=0;i<m;i++)
	{
		scanf("%lld%lld%lld",&a,&b,&w);
		d[a][b]=d[b][a]=w;
	}
	scanf("%lld",&Q);
	for(int i=0;i<Q;i++)
	{
		scanf("%lld%lld%lld",&x,&y,&t);
		if(tt[x]>t||tt[y]>t)
		{
			if(f==1)
			{
				printf("\n-1");
			}
			else
			{
				printf("-1");
				f=1;
			}
			continue;
		}
		if(ttt!=t)
		{
			memset(v,true,sizeof(v));
			for(int k=0;k<n;k++)
			{
				if(tt[k]>t)
				{
					for(int j=0;j<n;j++)
					{
						v[k][j]=v[j][k]=false;
					}
				}
			}
			ttt=t;
			F(x,y);
		}
		print(x,y);
	}
	return 0;
}
2020/7/29 09:12
加载中...