洛谷全RE但c++能过求调
查看原帖
洛谷全RE但c++能过求调
1041857
INTP_A楼主2024/7/29 08:12
#include<bits/stdc++.h>
using namespace std;
long long n,m,head[500009],tot=0,dp[100009],mid;
long long f[500005],b;
bool fa=false;
struct node{
	int next,to;
	long long w1;
}p[500009];
int addp(int u,int v,long long w){
	tot++;
	p[tot]={head[u],v,w};
	head[u]=tot;
};
bool vis[500005];
bool SPFA(){
	queue<int> q;
	vis[1]=true;
	dp[1]=0;
	q.push(1);
	while(!q.empty()){
		int o=q.front();
		q.pop();
		vis[o]=false;
		for(int i=head[o];i!=0;i=p[i].next){
			int x=p[i].to,y=p[i].w1;
			if(f[x]>mid)continue;
			if(dp[o]+y<dp[x]){
				dp[x]=dp[o]+y;
				if(!vis[x]){
					q.push(x);
					vis[x]=true;
				}
			}
		}
	}
	if(dp[n]>b)return false;
	else{
		fa=true;
		return true;
	}
}
int main(){
	cin>>n>>m>>b;
	for(int i=1;i<=n;i++){
		cin>>f[i];
		dp[i]=pow(2,31)-1;
	}
	for(int i=0;i<m;i++){
		int u,v;
		long long w;
		cin>>u>>v>>w;
        if(u==v)continue;
		addp(u,v,w);
		addp(v,u,w);
	}
	long long l=0,r=1000000009;
	while(l<=r){
		mid=(l+r)/2;
		if(SPFA())r=mid-1;
		else l=mid+1;
		for(int i=1;i<=n;i++){
			vis[i]=false;
			dp[i]=pow(2,31)-1;
		}
	}
	if(!fa)cout<<"AFK"<<endl;
	else cout<<l;
}

测试了测试点一和样例在c++上都能过,但在洛谷上就是RE,数组开了十倍大小,也没有死循环,求大佬帮忙找一下问题

2024/7/29 08:12
加载中...