60pts,TLE啊!
查看原帖
60pts,TLE啊!
658786
STUDENT00楼主2022/9/24 21:54

代码(Code)如下:

#include<bits/stdc++.h>
using namespace std;
int n,m,t[210],u[20000],v[20000],w[20000],q,x,y,z,dis[210],num[210],inf[1];
bool flag[210],vis[210];
struct node{
	int k,v;
};
vector<node> a[210];
queue<int> qt;
int main(){
	memset(inf,127,sizeof(inf));
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++) scanf("%d",&t[i]);
	for(int i=0;i<m;i++) scanf("%d%d%d",&u[i],&v[i],&w[i]);
	scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&x,&y,&z);
		memset(flag,0,sizeof(flag));
		for(int i=0;i<n;i++){
			if(t[i]<=z) flag[i]=1;
		}
		for(int i=0;i<n;i++){
			num[i]=0;
			a[i].clear();
		}
		for(int i=0;i<m;i++){
			if(flag[u[i]]&&flag[v[i]]){
				a[u[i]].push_back({v[i],w[i]});
				a[v[i]].push_back({u[i],w[i]});
				num[u[i]]++;
				num[v[i]]++;
			}
		}
		memset(vis,0,sizeof(vis));
		memset(dis,127,sizeof(dis));
		vis[x]=1;
		dis[x]=0;
		qt.push(x);
		while(!qt.empty()){
			int now=qt.front();
			vis[now]=0;
			for(int i=0;i<num[now];i++){
				if(dis[now]+a[now][i].v<dis[a[now][i].k]){
					dis[a[now][i].k]=dis[now]+a[now][i].v;
					if(!vis[a[now][i].k]){
						vis[a[now][i].k]=1;
						qt.push(a[now][i].k);
					}
				}
			}
			qt.pop();
		}
		if(dis[y]==inf[0]) printf("-1\n");
		else printf("%d\n",dis[y]);
	}
	return 0;
}
2022/9/24 21:54
加载中...