求助只有50分TLE
查看原帖
求助只有50分TLE
304551
xfzf_shentao楼主2023/10/11 19:42
#include<bits/stdc++.h>
using namespace std;
#define int int
int n,m,f[210][210],q[210][210],a[210];
int read() {
	int f=1,x=0;
	char ch=getchar();
	for(; ch<'0'||ch>'9'; ch=getchar());
	for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-48;
	return x*f;
}
inline void write(int n) {
	if (n==0) return;
	write(n/10);
	putchar(n%10+'0');
}
void chushihua() {
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			f[i][j]=q[i][j];
}
inline int minn(int x,int y) {
	return x<y?x:y;
}
signed main() {
	n=read();
	m=read();
	for(int i=1; i<=n; i++) a[i]=read();
	memset(f,62,sizeof(f));
	for(int i=1; i<=n; i++) f[i][i]=0;
	for(int i=1; i<=m; i++) {
		int x=read()+1,y=read()+1,z=read();
		f[x][y]=f[y][x]=z;
//		q[x][y]=f[x][y];
	}
	for(int T=read(); T; T--) {
		int x=read()+1,y=read()+1,t=read();
		if (a[x]>t||a[y]>t) {
			putchar('-'),putchar('1');
			putchar(10);
			continue;
		}
		int A=f[0][0];
		int k=1;
		while (a[k]<=t&&k<=n) {
			for(int i=1; i<=n; i++)
				if (a[i]<=t)
					for(int j=1; j<=n; j++)
						if (a[j]<=t)
							if (f[i][k]+f[k][j]<=f[i][j]) f[i][j]=f[i][k]+f[k][j];
			k++;
		}
		if (f[x][y]==A) {
			putchar('-'),putchar('1');
			putchar(10);
			continue;
		} else
			write(f[x][y]),putchar(10);
//		chushihua();
	}

	return 0;
}
2023/10/11 19:42
加载中...