| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41452 | LYLAKIOI | 【BJ】T1 | C++ | 通过 | 100 | 1326 MS | 546516 KB | 2733 | 2026-04-24 15:21:32 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int maxn=1e5+10; int n,m,q; ll a[11][maxn],b[11][maxn],dis[maxn][11][11],disl[maxn][11][11],disr[maxn][11][11],f[maxn<<2][11][11]; ll dp[11],tdp[11]; #define ls(p) (p<<1) #define rs(p) (p<<1|1) void bd(int l,int r,int p){ if(l==r){up(i,1,m)up(j,1,m)f[p][i][j]=dis[l][i][j];return;} int mid=l+r>>1; bd(l,mid,ls(p)),bd(mid+1,r,rs(p)); up(i,1,m)up(j,1,m)f[p][i][j]=1e18; up(i,1,m)up(j,1,m)up(k,1,m)f[p][i][k]=min(f[p][i][k],f[ls(p)][i][j]+f[rs(p)][j][k]+a[j][mid]); } void qu(int l,int r,int s,int t,int p){ if(l<=s&&t<=r){ up(i,1,m)tdp[i]=1e18; up(i,1,m)up(j,1,m)tdp[j]=min(tdp[j],dp[i]+f[p][i][j]+(s==l?0:a[i][s-1])); up(i,1,m)dp[i]=tdp[i]; return; } int mid=s+t>>1; if(l<=mid)qu(l,r,s,mid,ls(p));if(r>mid)qu(l,r,mid+1,t,rs(p)); } void slv(){ m=read(),n=read(),q=read(); up(i,1,m)up(j,1,n-1)a[i][j]=read(); up(i,1,m-1)up(j,1,n)b[i][j]=read(); up(i,1,n){ if(i==1)up(j,1,m)up(k,1,m)disl[i][j][k]=1e18; else up(j,1,m)up(k,1,m)disl[i][j][k]=disl[i-1][j][k]+a[j][i-1]+a[k][i-1]; up(j,1,m)disl[i][j][j]=0; up(j,1,m-1)disl[i][j][j+1]=disl[i][j+1][j]=min(disl[i][j][j+1],b[j][i]); up(k,1,m)up(p,1,m)up(q,1,m)disl[i][p][q]=min(disl[i][p][q],disl[i][p][k]+disl[i][k][q]); } down(i,n,1){ if(i==n)up(j,1,m)up(k,1,m)disr[i][j][k]=1e18; else up(j,1,m)up(k,1,m)disr[i][j][k]=disr[i+1][j][k]+a[j][i]+a[k][i]; up(j,1,m)disr[i][j][j]=0; up(j,1,m-1)disr[i][j][j+1]=disr[i][j+1][j]=min(disr[i][j][j+1],b[j][i]); up(k,1,m)up(p,1,m)up(q,1,m)disr[i][p][q]=min(disr[i][p][q],disr[i][p][k]+disr[i][k][q]); } up(i,1,n){ up(j,1,m)up(k,1,m)dis[i][j][k]=min(disl[i][j][k],disr[i][j][k]); up(k,1,m)up(p,1,m)up(q,1,m)dis[i][p][q]=min(dis[i][p][q],dis[i][p][k]+dis[i][k][q]); } bd(1,n,1); for(int a,b,c,d;q--;){ a=read(),b=read(),c=read(),d=read(); if(b>d)swap(b,d),swap(a,c); up(i,1,m)dp[i]=1e18;dp[a]=0; qu(b,d,1,n,1);printf("%lld\n",dp[c]); } } int main(){ // freopen("optimization.in","r",stdin),freopen("optimization.out","w",stdout); slv(); return 0; }