Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
41471 baka24 【BJ】T1 C++ 通过 100 2407 MS 548872 KB 3484 2026-04-24 17:08:22

Tests(20/20):


#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair bool AAA; const int MAXN=100010,M=11,inf=1e18; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} int n,m,q,a[MAXN][M],b[MAXN][M]; void Min(int &x,int y){x=min(x,y);} struct node{ int p[M][M]; }dis[MAXN],t[MAXN<<2]; int l[MAXN][M][M],r[MAXN][M][M]; int g[M<<1][M<<1]; void fyd(int k){ for(int o=1;o<=k;o++)for(int i=1;i<=k;i++)for(int j=1;j<=k;j++)g[i][j]=min(g[i][j],g[i][o]+g[o][j]); } void init(){ for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)l[0][i][j]=r[n+1][i][j]=inf; int k=m*2; for(int i=1;i<=n;i++){ for(int x=1;x<=k;x++)for(int y=1;y<=k;y++)g[x][y]=x==y?0:inf; for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)g[x][y]=l[i-1][x][y]; for(int x=1;x<=m;x++)g[x][x+m]=g[x+m][x]=a[i-1][x]; for(int x=1;x<m;x++)g[x+m][x+1+m]=g[x+m+1][x+m]=b[i][x]; fyd(k); for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)l[i][x][y]=g[m+x][m+y]; } for(int i=n;i>=1;i--){ for(int x=1;x<=k;x++)for(int y=1;y<=k;y++)g[x][y]=x==y?0:inf; for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)g[x][y]=r[i+1][x][y]; for(int x=1;x<=m;x++)g[x][x+m]=g[x+m][x]=a[i][x]; for(int x=1;x<m;x++)g[x+m][x+1+m]=g[x+m+1][x+m]=b[i][x]; fyd(k); for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)r[i][x][y]=g[m+x][m+y]; } for(int i=1;i<=n;i++){ for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)g[x][y]=min(l[i][x][y],r[i][x][y]); fyd(m); for(int x=1;x<=m;x++)for(int y=1;y<=m;y++)dis[i].p[x][y]=g[x][y]; } } #define lson (pos<<1) #define rson (pos<<1|1) void pushup(int pos,int mid){ for(int i=1;i<=m;i++)for(int j=1;j<=m;j++){ t[pos].p[i][j]=inf; for(int k=1;k<=m;k++)t[pos].p[i][j]=min(t[pos].p[i][j],t[lson].p[i][k]+t[rson].p[k][j]+a[mid][k]); } } void build(int pos,int l,int r){ if(l==r){ t[pos]=dis[l]; return; } int mid=(l+r)>>1; build(lson,l,mid),build(rson,mid+1,r); pushup(pos,mid); } int ds[M],ds2[M],ans; void query(int pos,int l,int r,int ql,int qr,int x,int y){ if(ql<=l&&qr>=r){ if(ql==l)for(int i=1;i<=m;i++)ds[i]=dis[l].p[x][i]; for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)Min(ds2[i],ds[j]+t[pos].p[j][i]); for(int i=1;i<=m;i++)ds[i]=ds2[i],ds2[i]=inf; if(qr==r)for(int i=1;i<=m;i++)ans=min(ans,ds[i]+dis[r].p[i][y]); return; } int mid=(l+r)>>1,res=inf; if(ql<=mid)query(lson,l,mid,ql,qr,x,y); if(ql<=mid&&qr>mid)for(int i=1;i<=m;i++)ds[i]+=a[mid][i]; if(qr>mid)query(rson,mid+1,r,ql,qr,x,y); } void slv(){ m=read(),n=read(),q=read(); for(int j=1;j<=m;j++)for(int i=1;i<n;i++)a[i][j]=read(); for(int j=1;j<m;j++)for(int i=1;i<=n;i++)b[i][j]=read(); init(); build(1,1,n); while(q--){ int x=read(),l=read(),y=read(),r=read(); if(l>r)swap(l,r),swap(x,y); for(int i=1;i<=m;i++)ds[i]=ds2[i]=inf;ans=inf; query(1,1,n,l,r,x,y); printf("%lld\n",ans); } } bool BBB; signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"<<((&AAA)-(&BBB))/1024.0/1024<<"mb\n"; return 0; }


测评信息: