60pts求助(玄关)
查看原帖
60pts求助(玄关)
1287433
__ycy1124__楼主2024/7/22 11:29
#include<bits/stdc++.h>
using namespace std;
int n,m,hp;
struct Node{
	int to,val;
};
int w[10001];
vector<Node>a[10001];
long long js[10001];
bool check(int p,int mid,long long val){
	if(p==n&&val<=hp){
		return 1;
	}
	if(val>js[p]||val>hp){
		return 0;
	}
	js[p]=val;
	bool bj=0;
	for(auto it:a[p]){
		if(check(it.to,mid,val+it.val)&&w[it.to]<=mid){
			bj=1;
		}
	}
	return bj;
}
int main(){
	scanf("%d%d%d",&n,&m,&hp);
	for(int i=1;i<=n;i++){
		scanf("%d",&w[i]);
	}
	for(int i=1;i<=m;i++){
		int u,v,val;
		scanf("%d%d%d",&u,&v,&val);
		a[u].push_back({v,val});
		a[v].push_back({u,val});
	}
	int ans;
	bool bj=0;
	int l=0,r=1e9;
	while(l<=r){
		int mid=l+r>>1;
		for(int i=1;i<=n;i++){
			js[i]=1e9;
		}
		if(check(1,mid,0)){
			r=mid-1;
			ans=mid;
			bj=1;
		}
		else{
			l=mid+1;
			ans=mid+1;
		}
	}
	if(!bj){
		printf("AFK");
		return 0;
	}
	printf("%d",ans);
	return 0;
}
2024/7/22 11:29
加载中...