社区讨论

求调,悬关

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lz4uhdvt
此快照首次捕获于
2024/07/28 08:51
2 年前
此快照最后确认于
2024/07/28 09:12
2 年前
查看原帖
RT
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxx=1e9;
int n,m,b;
bool vis[10005];
int a[10005],dis[10005]; 
int head[20005],ne[20005],ver[20005],w[20005],tot=-1;
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void add(int x,int y,int z){
	tot++;
	ver[tot]=y;
	w[tot]=z;
	ne[tot]=head[x];
	head[x]=tot;
}
bool dijkstra(int x){
	if(x<a[1]) return 0;
	for(int i=1;i<=n;i++) dis[i]=INT_MAX;
	memset(vis,0,sizeof vis);
	dis[1]=0;
	q.push(make_pair(0,1));
	int s1;
	while(!q.empty()){
		cout<<q.top().first<<" "<<q.top().first<<"\n";
		s1=q.top().second;
		q.pop();
		if(vis[s1]) continue;
		vis[s1]=1;
		for(int i=head[s1];i!=-1;i=ne[i]){
			if(a[ver[i]]<=x&&vis[ver[i]]==0&&dis[s1]+w[i]<dis[ver[i]]){
				dis[ver[i]]=dis[x]+w[i];
				q.push(make_pair(dis[ver[i]],ver[i]));
			}
			
		}
	}
	if(dis[n]<=b){
		return 1;
	}
	return 0;
}
int main(){
	memset(head,-1,sizeof head);
	cin>>n>>m>>b;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c); 
		add(b,a,c);
	}
	if(dijkstra(maxx)){
		cout<<"AFK";
		return 0;
	}
	int l=1,r=maxx;
	while(l<=r){
		int mid=(l+r)/2;
		if(dijkstra(mid)){
			r=mid-1;
		}else{
			l=mid+1;
		}
	}
	cout<<l;
	return 0;
}

回复

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

正在加载回复...