求卡常,或者这题根本不能这么做?
查看原帖
求卡常,或者这题根本不能这么做?
572133
潘德理2010楼主2023/12/19 20:42

直接跑的最短路,T 掉了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,x,y;
ll dis[20000100];
bool vis[20000100];
priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > > q;
int main(){
	scanf("%d%d%d",&n,&x,&y);
	memset(dis,0x3f3f3f,sizeof(dis));
	dis[1]=x;
	q.push(make_pair(dis[1],1));
	while(!q.empty()){
		int u=q.top().second;
		q.pop();
		if(vis[u]) continue;
		vis[u]=true;
		if(u!=2*n&&dis[u]+x<dis[u+1]){
			dis[u+1]=dis[u]+x;
			q.push(make_pair(dis[u+1],u+1));
		}
		if(u!=1&&dis[u]+x<dis[u-1]){
			dis[u-1]=dis[u]+x;
			q.push(make_pair(dis[u-1],u-1));
		}
		if(u<=n&&dis[u]+y<dis[u*2]){
			dis[u*2]=dis[u]+y;
			q.push(make_pair(dis[u*2],u*2));
		}
	}
	printf("%lld",dis[n]);
}
2023/12/19 20:42
加载中...