rt.
本地:

洛谷:

代码:
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define ll long long
#define ull unsigned long long
#define re register
#define il inline
const int N=310;
const int mod=998244353;
int a[N][N],b[N][N],n,m,add[N][N],head[N<<3],nxt[N<<4],to[N<<3],wt[N<<4],cnt,dist[N<<3],vis[N<<3],tot[N<<3];
il int read()
{
int f=1,x=0;
char c=getchar();
if(c=='-') f=-1,c=getchar();
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
il void addedge(int u,int v,int w)
{
cnt++;
nxt[cnt]=head[u];
head[u]=cnt;
to[cnt]=v;
wt[cnt]=w;
}
int spfa()
{
memset(dist,0x3f,sizeof dist);
memset(vis,0,sizeof vis);
memset(tot,0,sizeof tot);
int u,v;
queue<int> q;
dist[0]=0;
vis[0]=1;
q.push(0);
while(!q.empty())
{
u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=nxt[i])
{
v=to[i];
if(dist[v]>dist[u]+wt[i])
{
dist[v]=dist[u]+wt[i];
if(!vis[v])
{
vis[v]=1;
tot[v]++;
if(tot[v]==n+m+1) return 0;
q.push(v);
}
}
}
}
return 1;
}
il void solve()
{
cin>>n>>m;
memset(head,0,sizeof head);
memset(nxt,0,sizeof nxt);
memset(to,0,sizeof to);
memset(wt,0,sizeof wt);
for(int i=2;i<=n;i++)
for(int j=2;j<=m;j++)
cin>>b[i][j];
for(int i=2;i<=n;i++)
for(int j=2;j<=m;j++)
a[i][j]=b[i][j]-a[i-1][j]-a[i][j-1]-a[i-1][j-1];
for(int i=1;i<=n+m;i++) addedge(0,i,0);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if((i+j)%2==0)
{
addedge(n+m+j,i,(int)1e6-a[i][j]);
addedge(i,n+m+j,a[i][j]);
}
else
{
addedge(i,n+m+j,(int)1e6-a[i][j]);
addedge(n+m+j,i,a[i][j]);
}
}
if(!spfa())
{
cout<<"NO"<<endl;
return;
}
cout<<"YES"<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if((i+j)%2==0) add[i][j]=dist[i]-dist[j+n+m];
else add[i][j]=dist[j+n+m]-dist[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]+add[i][j]<<" ";
cout<<endl;
}
}
int main()
{
int t;
cin>>t;
while(t--)
solve();
return 0;
}