请问一下为何会RE?
查看原帖
请问一下为何会RE?
672837
DaShabby楼主2022/12/15 10:50
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn=2e5+34,inf=0x3f3f3f3f;
int t[209],dis[209],vis[209],cnt,idx,tot;
int head[209],to[409],w[409],nex[409];
void addedge(int a,int b,int c){
	nex[++idx]=head[a];
	head[a]=idx;
	w[idx]=c;
	to[idx]=b;
}
int Dij(int s,int now_t,int n,int target){
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f,sizeof(dis));
	if(t[s]>now_t||t[target]>now_t)return -1;
	dis[s]=0;
	priority_queue<pii,vector<pii>,greater<pii> >que;
	que.push({0,s});
	while(que.size()){
		pii T=que.top();
		que.pop();
		int u=T.second;
		if(vis[u]||t[u]>now_t)continue;
		vis[u]++;
		for(int i=head[u];i;i=nex[i]){
			int v=to[i];
			if(dis[v]>dis[u]+w[i]){
				dis[v]=dis[u]+w[i];
				que.push({dis[v],v});
			}
		}
	}
	return dis[target]!=inf?dis[target]:-1;
}
void work(){
	int n,m,q,a,b,c;
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)scanf("%d",&t[i]);
	while(m--){
		scanf("%d%d%d",&a,&b,&c);
		addedge(a,b,c);
		addedge(b,a,c);
	}
	scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&a,&b,&c);
		printf("%d\n",Dij(a,c,n,b));
	}
}
int main()
{
    work();
    return 0;
}
2022/12/15 10:50
加载中...