日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P7515-[省选联考 2021A卷]矩阵游戏【差分约束】

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P7515-[省选联考 2021A卷]矩阵游戏【差分约束】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P7515


題目大意

有一個n?mn*mn?m的矩形AAA,然后給出一個(n?1)?(m?1)(n-1)*(m-1)(n?1)?(m?1)的矩形BBB滿足
Bi,j=Ai,j+Ai+1,j+Ai,j+1+Ai+1,j+1B_{i,j}=A_{i,j}+A_{i+1,j}+A_{i,j+1}+A_{i+1,j+1}Bi,j?=Ai,j?+Ai+1,j?+Ai,j+1?+Ai+1,j+1?

求能否構造合法矩形AAA使得0≤ai,j≤1060\leq a_{i,j}\leq 10^60ai,j?106

1≤T≤10,1≤n,m≤300,0≤bi,j≤4×1061\leq T\leq 10,1\leq n,m\leq 300,0\leq b_{i,j}\leq 4\times 10^61T10,1n,m300,0bi,j?4×106


解題思路

如果不考慮ai,ja_{i,j}ai,j?的限制顯然很容易構造一個方案。

然后要考慮怎么調整到滿足限制,不難發現我們每行/列進行+1/?1/+1/?1...+1/-1/+1/-1...+1/?1/+1/?1...操作不會改變bbb數組上的值,所以我們設cic_ici?表示第iii行進行了多少次,第jjj行進行了多少次,那么有
0≤ai,j±ci±dj≤1060\leq a_{i,j}±c_i±d_j\leq 10^60ai,j?±ci?±dj?106

如果我們控制使得每個位置的cic_ici?djd_jdj?的符號不同那么就可以進行差分約束了。


code

#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; const ll N=610; struct node{ll to,next,w; }a[N*N]; ll T,n,m,b[N][N],c[N][N]; ll tot,cnt[N],ls[N],f[N]; bool v[N];deque<int> q; void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return; } bool SPFA(){memset(f,0x3f,sizeof(f));memset(cnt,0,sizeof(cnt));q.push_back(1);v[1]=cnt[1]=1;f[1]=0;while(!q.empty()){ll x=q.front();v[x]=0;q.pop_front();for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;cnt[y]=cnt[x]+1;if(cnt[y]>=n+m&&a[i].w<0)return 1;if(!v[y]){v[y]=1;if(!q.empty()&&f[y]<f[q.front()])q.push_front(y);else q.push_back(y);}}}}return 0; } signed main() {scanf("%lld",&T);while(T--){memset(ls,0,sizeof(ls));tot=0;scanf("%lld%lld",&n,&m);for(ll i=1;i<n;i++)for(ll j=1;j<m;j++)scanf("%lld",&b[i][j]);memset(c,0,sizeof(c));for(ll i=1;i<=m;i++)c[1][i]=0;for(ll i=2;i<=n;i++){c[i][1]=0;for(ll j=2;j<=m;j++)c[i][j]=b[i-1][j-1]-c[i-1][j-1]-c[i-1][j]-c[i][j-1];}for(ll i=1;i<=n;i++)for(ll j=1;j<=m;j++){if((i+j)&1)addl(i,j+n,c[i][j]),addl(j+n,i,1e6-c[i][j]);else addl(j+n,i,c[i][j]),addl(i,j+n,1e6-c[i][j]);}if(!SPFA()){puts("YES");for(ll i=1;i<=n;i++,putchar('\n'))for(ll j=1;j<=m;j++){if((i+j)&1)c[i][j]=c[i][j]+f[i]-f[j+n];else c[i][j]=c[i][j]-f[i]+f[j+n];printf("%lld ",c[i][j]);}}else puts("NO");}return 0; }

總結

以上是生活随笔為你收集整理的P7515-[省选联考 2021A卷]矩阵游戏【差分约束】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。