题意

一个n*m的矩阵,初始值全为0,每一行每一列操作一次可以加1或者减1,问能否操作得到给定矩阵。

分析

  • 行和列的分别的加减是可以相互抵消的,因此我们只需要考虑行的加和列的减。
  • 对于给定矩阵每一个数\(x\),假设对应行\(u\)加上\(r_u\)次,对应列\(v\)减去\(c_v\)次,即\(r_u+c_v=x\),转化为不等式,即

\[r_u-c_v<=x
\\
c_v-r_u<=-x
\]

  • 对于这样的不等式,使用差分约束系统转化为图论问题,即建边\((v+n,u,x)\)和\((u,v+n,-x)\),然后判断是否有解,只需用spfa判负环即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+50;
const int INF=0x3f3f3f3f;
int T,n,m,k,u,v,w;
struct Edge{
int v,w,next;
}e[N];
int cnt,head[N];
void init(){
cnt=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v,int w){
e[cnt]=Edge{v,w,head[u]};
head[u]=cnt++;
}
int vis[N],dis[N];
bool spfa(int s){
for(int i=1;i<=s;i++){
vis[i]=0;
dis[i]=INF;
}
queue<int> q;
q.push(s);
vis[s]++;
dis[s]=0;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
int w=e[i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(v);
vis[v]++;
if(vis[v]>s+1){
return true;
}
}
}
}
return false;
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&k);
init();
int s=n+m+1;
for(int i=1;i<s;i++){
add(s,i,0);
}
for(int i=1;i<=k;i++){
scanf("%d%d%d",&u,&v,&w);
add(v+n,u,w);
add(u,v+n,-w);
}
if(spfa(s)){
printf("No\n");
}else{
printf("Yes\n");
}
}
return 0;
}

最新文章

  1. Visual Studio2008环境下查找C#中方法的“查看所有引用”
  2. Hadoop - Azkaban 作业调度
  3. Java内存访问重排序笔记
  4. 使用Window Live Writer写博客
  5. jquery判断多选框是否选中
  6. Linux 学习笔记 cp 和 ln
  7. Drainage Ditches(Dinic最大流)
  8. VB6基本数据库应用(四):数据的提取,新增和修改
  9. 怎么样CSDN Blog投机和增加流量?
  10. z-index 解析
  11. 安装aptana(1)
  12. intellij idea 12 搭建maven web项目 freemarker + spring mvc
  13. 玩转spring boot——简单登录认证
  14. windows系统下用python更新svn和Git
  15. DLL加载顺序
  16. Vue(八):监听属性watch
  17. CefSharp F12打开DevTools查看console
  18. Scala中class、object、case class、case object区别
  19. Java中正则匹配性能测试
  20. cookie,session,localStage,sessionStage区别

热门文章

  1. 论文阅读:NETFPGA SUME: TOWARD 100 GBPS AS RESEARCH COMMODITY
  2. Postman(二)、调试模式
  3. 深入理解二阶段提交协议(DDB对XA悬挂事务的处理分析)(一)
  4. Apicloud_(项目)网上书城03_拓展模块实现
  5. MQTT QOS含义
  6. 复制表结构和数据SQL语句(转)
  7. linux系统问题排查
  8. D5(太长了md没写完)
  9. leetcode 105从前序与中序遍历序列构造二叉树
  10. react native props上存在的属性,显示不存在