社区讨论

只过了1 4 7 11个测试点只有37分

P1462通往奥格瑞玛的道路参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo99cjhz
此快照首次捕获于
2023/10/28 07:41
2 年前
此快照最后确认于
2023/10/28 07:41
2 年前
查看原帖
求助
CPP
#include<queue>
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PII pair<int,int>
#define x first
#define y second
using namespace std;
int n,m,b;
int f[100005];
int h[100005],e[100005],ne[100005],w[100005],idx;
int dis[100005];
bool v[100005];
void add(int a,int b,int c)
{
	e[idx]=b,w[idx]=c,ne[idx]=h[idx],h[a]=idx++;
}
int check(int mid)
{
	for(int i=1;i<=n;i++)dis[i]=1e9;
	memset(v,0,sizeof v);
	priority_queue<PII,vector<PII>,greater<PII>> q;
	q.push({0,1});
	dis[1]=0;
	while(q.size())
	{
		PII t=q.top();
		q.pop();
		
		int ver=t.y;
		int distance=t.x;
		
		if(v[ver])continue;
		v[ver]=1;
		
		for(int i=h[ver];i!=-1;i=ne[i])
		{
			int j=e[i];
			if(dis[j]>dis[ver]+w[i]&&f[j]<=mid)
			{
				dis[j]=dis[ver]+w[i];
				q.push({dis[j],j});
			}
		}
	}
	if(dis[n]<b)
	return 1;
	else
	return 0;	
}
int main()
{
	cin>>n>>m>>b;
	for(int i=1;i<=n;i++)
	{
		cin>>f[i];
	}
	
	memset(h,-1,sizeof h);
	
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
		add(b,a,c);
	}
	

	int l=1,r=1e9+1;
	while(l<r)
	{
	 	int mid=(l+r)>>1;
	 	check(mid);
		if(dis[n]<b)
		{
			r=mid;
		}
		else
		{
			l=mid+1;
		}	 	
	}
	check(l);
	if(dis[n]>b)cout<<"AFK"<<endl;
	else
	cout<<l<<endl;
} 
实在不知道哪里错了

回复

0 条回复,欢迎继续交流。

正在加载回复...