求调暴力
查看原帖
求调暴力
793625
Pink_Cut_Tree楼主2024/10/2 11:05

Subtask 1 只有 #3 过不去,求调或 hack

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+5,inf=2147483647;
int n,m,q;
vector<int>val[N];
struct Edge{
	int to,value;
};
vector<Edge>G[N];
int dx[]={0,-1,0,1},dy[]={1,0,-1,0};
int num(int x,int y){
	return (x-1)*m+y;
}
int dis[N][N];
struct node{
	int x,y;
}nd[55];
signed main(){
	cin.tie(0)->sync_with_stdio(0);
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		val[i].push_back(0);
		for(int j=0,tmp;j<m;j++){
			cin>>tmp;
			val[i].push_back(tmp);
		}
	}
	for(int i=1;i<=q;i++){
		cin>>nd[i].x>>nd[i].y;
	}
	memset(dis,63,sizeof dis);
	for(int i=1;i<=n*m;i++){
		dis[i][i]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			for(int k=0;k<4;k++){
				int px=i+dx[k],py=j+dy[k];
				if(px<1||py<1||px>n||py>m){
					continue;
				}
				if(val[px][py]+val[i][j]<0){
					cout<<"No\n"; return 0;
				}
				dis[num(i,j)][num(px,py)]=val[px][py];
				dis[num(px,py)][num(i,j)]=val[i][j];
			}
		}
	}
	for(int k=1;k<=n*m;k++){
		for(int i=1;i<=n*m;i++){
			for(int j=1;j<=n*m;j++){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			}
		}
	}
	int minn=inf;
	for(int i=1;i<=n*m;i++){
		int maxx=-inf;
		for(int j=1;j<=q;j++){
			maxx=max(maxx,dis[num(nd[j].x,nd[j].y)][i]+val[nd[j].x][nd[j].y]);
		}
		minn=min(minn,maxx);
	}
	cout<<minn;
return 0;
}
2024/10/2 11:05
加载中...