比赛 2025暑期集训第8场 评测结果 WWWWWT
题目名称 狼抓兔子 最终得分 0
用户昵称 彭欣越 运行时间 5.268 s
代码语言 C++ 内存使用 14.99 MiB
提交时间 2025-08-13 11:58:53
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1010;
int dx[]={0,-1,1,0,1,-1},dy[]={1,0,0,-1,1,-1};
ll ans=1e18+10;
int n,m,a[N][N],b[N][N],c[N][N],vis[N*N];
int tot,head[N*N];
struct edge {
	int u,v,w,nxt,x,y;
}e[2*N*N];
void add (int u,int v,int w) {
	e[++tot].v=v;
	e[tot].u=u;
	e[tot].w=w;
	e[tot].nxt=head[u];
	head[u]=tot;
}
void dfs (int idx,ll sum) {
	for (int i=head[idx];i;i=e[i].nxt) {
		int v=e[i].v;
		if (vis[v]) continue;
		vis[v]=1;
		ans=min(ans,sum+e[i].x);
		dfs(v,sum+e[i].x);
	}
}
int main () {
	freopen("bjrabbit.in","r",stdin);
	freopen("bjrabbit.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> m;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<m;j++) {
			int x;
			cin >> x;
			add((i-1)*n+m,(i-1)*n+m+1,x);
			add((i-1)*n+m+1,(i-1)*n+m,x);
		}
	}
	for (int i=1;i<n;i++) {
		for (int j=1;j<=m;j++) {
			int x;
			cin >> x;
			add((i-1)*n+m,i*n+m,x);
			add(i*n+m,(i-1)*n+m,x);
		}
	}
	for (int i=1;i<n;i++) {
		for (int j=1;j<m;j++) {
			int x;
			cin >> x;
			add((i-1)*n+m,i*n+m+1,x);
			add(i*n+m+1,(i-1)*n+m,x);
		}
	}
	for (int i=1;i<=tot;i++) {
		int x=e[i].u,y=e[i].v,z=e[i].w;
		int sum=0;
		for (int j=head[x];j;j=e[j].nxt) {
			int v=e[j].v,w=e[j].w;
			if (v==y) continue;
			sum+=w;
		}
		e[i].x=sum-z;
		sum=0;swap(x,y);
		for (int j=head[x];j;j=e[j].nxt) {
			int v=e[j].v,w=e[j].w;
			if (v==y) continue;
			sum+=w;
		}
		e[i].y=sum-z;
	}
	ll sum=0;
	for (int i=head[1];i;i=e[i].nxt) {
		sum+=e[i].w;
		//cout << e[i].w <<endl;
	}
	ans=sum,sum=0;
	//cout << ans <<endl;
	for (int i=head[n*m];i;i=e[i].nxt) {
		sum+=e[i].w;
	}
	ans=min(ans,sum);
	vis[1]=1;
	dfs(1,0);
	memset(vis,0,sizeof(vis));
	vis[n*m]=1;
	dfs(n*m,0);
	cout << ans <<endl;
	return 0;
}