比赛 |
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;
}