灵异事件
  • 板块灌水区
  • 楼主MspAInt
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/10/18 20:57
  • 上次更新2023/10/29 10:54:55
查看原帖
灵异事件
736801
MspAInt楼主2022/10/18 20:57
#include<bits/stdc++.h>
#define inf 1e18
#define mp make_pair
using namespace std;
struct ikun{
	long long ed,next;
	long long v;
}a[100050];
long long n,m,hp,g;
long long p[10010],nbs[10010];
void add(long long x,long long y,long long z){
	g++;
	a[g]=(ikun){y,nbs[x],z};
	nbs[x]=g;
}
bool dijk(long long x){
	if(x<p[1])return 0;
	long long d[10010]={};
	bool v[10010]={};
	for(int i=1;i<=n;i++){
		d[i]=inf;
		v[i]=0;
	}
	d[1]=0;
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>h;
	h.push(mp(0,1));
	while(!h.empty()){
		long long k=h.top().second;
		h.pop();
		if(v[k])continue;
		v[k]=1;
		long long l=nbs[k];
		while(l){
			long long to=a[l].ed;
			if(p[to]>x)continue;
			if(d[to]>d[k]+a[l].v){
				d[to]=d[k]+a[l].v;
				h.push(mp(d[to],to));
			}
			l=a[l].next;
		}
	}
	return d[n]<=hp;
}
int main(){
	freopen("1.in","r",stdin);
	long long l,r=-1;
	cin>>n>>m>>hp;
	cout<<n<<m<<hp<<endl;
	for(int i=1;i<=n;i++){
		cin>>p[i];
		r=max(p[i],r);
	}
	l=max(p[1],p[n]);
	for(int i=1;i<=m;i++){
		long long x,y,t;
		cin>>x>>y>>t;
		add(x,y,t);
		add(y,x,t);
	}
	if(!dijk(r)){
		cout<<"AFK";
		return 0;
	}
	long long ans;
	while(l<=r){
		long long mid=(l+r)/2;
		if(dijk(mid)){
			ans=mid;
			r=mid-1;
		}else l=mid+1;
	}
	cout<<ans;
	return 0;
}

1.in是一个超级大(真的很大)的样例

当把cout<<n<<m<<hp<<endl;去掉的时候不会输出“AFK”,反之会,这是为啥?

2022/10/18 20:57
加载中...