为什么用全源最短路可以过,求证明
查看原帖
为什么用全源最短路可以过,求证明
655227
Zbc20211226楼主2024/11/26 10:44
int n;
long long x[505],y[505],g[505][505],k,ans=0,s;
int main(){
	scanf("%d%lld",&n,&k);
	for(int i=1;i<=n;++i)scanf("%lld%lld",&x[i],&y[i]);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			g[i][j]=1e12;
			if(x[i]<=x[j]&&y[i]<=y[j]&&i!=j){
				g[i][j]=x[j]+y[j]-x[i]-y[i]-1;
			}
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			for(int l=1;l<=n;++l){
				if(g[j][i]+g[i][l]<g[j][l])g[j][l]=g[j][i]+g[i][l];
			}
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			if(g[i][j]<=k&&x[i]<=x[j]&&y[i]<=y[j]&&i!=j){
				s=x[j]+y[j]-x[i]-y[i]-1;
				s=s-g[i][j]+2+k;//s-g为i,j 之间经过原本点的数量
				ans=max(ans,s);
			}
		}
	}
	printf("%lld",ans);
	return 0;
}
2024/11/26 10:44
加载中...