70pts求助
查看原帖
70pts求助
671489
hy8z楼主2024/10/5 21:56
#include<bits/stdc++.h>
using namespace std;
const long long INF=1e18+7;
vector<pair<long long,long long> >g[1000001];
long long dis[1000001],a[1000001],n,m,b,maxn=-1;
bool vis[1000001];
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long> > > q;
bool check(long long t)
{
	if(a[1]>t)return false;
	for(long long i=1;i<=n;i++)dis[i]=INF,vis[i]=0;
	dis[1]=0;
	q.push(make_pair(0,1));
	while(!q.empty())
	{
		pair<long long,long long> tp=q.top();
		long long MXid=tp.second;
		q.pop();
		if(MXid==n)
		{
			if(dis[n]<=b)return true;
			else return false;
		}
		if(vis[MXid]==1)continue;
		vis[MXid]=1;
		for(long long j=0;j<g[MXid].size();j++)
		{
			long long ed=g[MXid][j].first,eg=g[MXid][j].second;
			if(a[ed]>t)continue;
			if(dis[ed]>dis[MXid]+eg)
			{
				dis[ed]=dis[MXid]+eg;
				q.push(make_pair(dis[ed],ed));
			}
		}
	}
	while(!q.empty())q.pop();
	return false;
}
int main()
{
	cin>>n>>m>>b;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
		maxn=max(maxn,a[i]);
	}
	for(long long i=1;i<=m;i++)
	{
		long long u,v,w;
		cin>>u>>v>>w;
		g[u].push_back(make_pair(v,w));
		g[v].push_back(make_pair(u,w));
	}
	long long l=1,r=maxn;
	while(r>=l)
	{
		long long mid=(l+r)/2;
		if(check(mid))r=mid-1,maxn=mid;
		else l=mid+1;
	}
	if(maxn==-1)cout<<"AFK";
	else cout<<maxn;
	return 0;
}

第1、4、7个点WA了,本人能力有限感觉看不出哪里有问题。(目测应该是判断不了AFK的情况)

2024/10/5 21:56
加载中...