wa最后两个
查看原帖
wa最后两个
1424375
s_z_x楼主2024/10/15 15:26

WA最后两个点,求助

#include<bits/stdc++.h>
#define INF 1e9;
using namespace std;

const int N=1000100;
int n,m,b;
int ff[N],d[N];
int head[N],to[N],net[N],E;

struct node{
	int dis , u;
	bool operator<(const node & cmp )const{
		return dis>cmp.dis;
	} 
};

void init(){
	E=0;
	memset(head,-1,sizeof(head));
}

int w[N];
void add( int a , int b , int c ){
	to[E] = b;
	net[E] = head[a];
	head[a] = E;
	w[E] = c;
	E++;
}
bool use[N];
priority_queue< node > q;
bool bfs(int x){
	if(ff[1]>x) return false;
	memset(use,false,sizeof(use));
	for( int i = 1 ; i < n+1 ; i++ ) d[i] = INF;
	
	node s;s.dis = 0;s.u = 1;d[1] = 0;q.push(s);
	
	while(!q.empty()){
		node f = q.top();q.pop();
		if(use[f.u]==true) continue;
		use[f.u]=true;
		int u=f.u;
		for(int i=head[u];i!=-1;i=net[i]){
			int v=to[i];
			if(d[v]>d[u]+w[i] and ff[v]<=x){
				d[v]=d[u]+w[i];
				if(use[v]==false){
					node t;
					t.dis=d[v];
					t.u=v;
					q.push(t);
				}
			}
		}
	}
	if(d[n]<b) return true;
	else return false;

}


int main(){
	init();
	cin>>n>>m>>b;
	int r=0;
   
	for( int i = 1 ; i <= n ; i ++ ) cin>>ff[i],r=max(r,ff[i]);
    
	for( int i = 1 ; i <= m ; i ++ ){
       
		int x,y,z;
		cin>>x>>y>>z;
        
		add( x , y , z );
		add( y , x , z );


	}
	if(!bfs(r)){
		cout<<"AFK";
		return 0;
	}
	int l=ff[1];
	int qwq=r;
	r++;
	while(r>=l){
		int mid=(l+r)/2;
		if(bfs(mid)){
			r=mid-1;
		}
		else l=mid+1;
	}
	//if(l==qwq) cout<<"AFK"<<endl;
	cout<<l<<endl;
	return 0;
}
2024/10/15 15:26
加载中...