比赛 |
2025暑期集训第8场 |
评测结果 |
AAAAAA |
题目名称 |
狼抓兔子 |
最终得分 |
100 |
用户昵称 |
wdsjl |
运行时间 |
0.374 s |
代码语言 |
C++ |
内存使用 |
19.26 MiB |
提交时间 |
2025-08-13 08:22:21 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int maxn=1005,maxs=2000005,maxe=6000005;
int n,m,S,T;
int tot,son[maxe],nxt[maxe],lnk[maxs],w[maxe];
void add(int x,int y,int z){
son[++tot]=y;nxt[tot]=lnk[x];lnk[x]=tot;w[tot]=z;
}
int getid(int x,int y,int op){
if(x<1||y==m)return S;
if(y<1||x==n)return T;
return ((x-1)*m+y)*2+op;
}
int que[maxs],dat[maxs];
bool vis[maxs];
int spfa(){
memset(dat,63,sizeof(dat));
memset(vis,0,sizeof(vis));
int hed=0,til=1;
que[1]=S;dat[S]=0;
while(hed!=til){
int x=que[hed=(hed+1)%maxs];
vis[x]=0;
for(int j=lnk[x];j;j=nxt[j])
if(dat[son[j]]>dat[x]+w[j]){
dat[son[j]]=dat[x]+w[j];
if(!vis[son[j]]){
vis[son[j]]=1,
que[til=(til+1)%maxs]=son[j];
}
}
}
return dat[T];
}
int main(){
freopen("bjrabbit.in","r",stdin);
freopen("bjrabbit.out","w",stdout);
scanf("%d%d",&n,&m);
S=0;
T=1;
for(int i=1;i<=n;i++){
for(int j=1;j<m;j++){
int x=getid(i-1,j,1),y=getid(i,j,0),z;
scanf("%d",&z);
add(x,y,z);add(y,x,z);
}
}
for(int i=1;i<n;i++){
for(int j=1;j<=m;j++){
int x=getid(i,j-1,0),y=getid(i,j,1),z;
scanf("%d",&z);
add(x,y,z);add(y,x,z);
}
}
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
int x=getid(i,j,0),y=getid(i,j,1),z;
scanf("%d",&z);
add(x,y,z);add(y,x,z);
}
}
printf("%d",spfa());
return 0;
}