bzoj 4500 矩阵 题解
题意:
有一个 $ n * m $ 的矩阵,初始每个格子的权值都为 $ 0 $,可以对矩阵执行两种操作:
- 选择一行,该行每个格子的权值加1或减1。
- 选择一列,该列每个格子的权值加1或减1。
现在有 $ K $ 个限制,每个限制为一个三元组 $ (x,y,c) $ ,代表格子$ (x,y) $ 权值等于 $ c $ 。问是否存在一个操作序列,使得操作完后的矩阵满足所有的限制。如果存在出” $ Yes $ ”,否则输出” $ No $ ”。
这道题是个一个查分约束题,它给出 $ K $ 个条件要求即$ (x,y) $ 的权值为 $ c $ 我们可以看作 $ x $ 行的变换量 $ add[x] $ ,与第 $ y $ 列的变化量 $ add[y] $ 的和等于 $ c $ ,由于我们设置的是变化量所以是正还是负就无所谓~,所以我们可以写出 $ add[x]+add[y]=c $
等价于 $ add[y]-(-add[x])=c $
等价于 $ add[y]-(-add[x]) \geq c $ && $ add[y]-(-add[x]) \leq c $
等价于 $ add[y]-add[x]^ \geq c $ && $ add[x]^
-add[y] \geq -c $
然后就可以由 $ x->y $ 连一条长为 $ c $ 的边,由 $ y->x $ 连一条长为 $ -c $ 的边
由于列与行要区分,那么令列加上 $ n $ 即可
代码
#include<bits/stdc++.h>
using namespace std;
const int size=2010;
int head[size],Next[2*size],ver[2*size],edge[2*size],deg[size],tot;
int v[size],dis[size];
int n,m,k,T;
queue<int>q;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
void add(int x,int y,int z){
ver[++tot]=y;edge[tot]=z;Next[tot]=head[x];head[x]=tot;
}
bool spfa(){
while(q.size()) q.pop();
memset(v,0,sizeof(v));
memset(deg,0,sizeof(deg));
memset(dis,0x3f,sizeof(dis));
dis[0]=0;v[0]=1;q.push(0);
while(q.size()){
int x=q.front();q.pop();v[x]=0;
if(deg[x]==n+m-1) return 0;
deg[x]++;
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
if(dis[y]>dis[x]+edge[i]){
dis[y]=dis[x]+edge[i];
if(!v[y]){
v[y]=1;
q.push(y);
}
}
}
}
return 1;
}
int main(){
scanf("%d",&T);
while(T--){
memset(head,0,sizeof(head));tot=0;
n=read();m=read();k=read();
for(int i=1;i<=k;++i){
int x,y,z;
x=read();y=read();z=read();
add(x,y+n,z);
add(y+n,x,-z);
}
for(int i=1;i<=n+m;++i){
add(0,i,0);
}
if(spfa()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
bzoj 4500 矩阵 题解的更多相关文章
- BZOJ 4500: 矩阵
4500: 矩阵 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 326 Solved: 182[Submit][Status][Discuss] De ...
- BZOJ 4500: 矩阵 差分约束
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4500 题解: 从行向列建边,代表一个格子a[i][j],对每个顶点的所有操作可以合并在一 ...
- 【BZOJ 4500 矩阵】
Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 390 Solved: 217[Submit][Status][Discuss] Description ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值, ...
- bzoj 4500: 矩阵【差分约束】
(x,y,z)表示格子(x,y)的值为z,也就是x行+y列加的次数等于z,相当于差分约束的条件,用dfs判断冲突即可. #include<iostream> #include<cst ...
- BZOJ 4500: 矩阵 带权并查集
这个思路挺巧妙的 ~ 定义一行/列的权值为操作后所整体增加的值. 那么,我们会有若干个 $a[x]+b[y]=c$ 的限制条件. 但是呢,我们发现符号是不能限制我们的(因为可加可减) 所以可以将限制条 ...
- BZOJ 1179 Atm 题解
BZOJ 1179 Atm 题解 SPFA Algorithm Tarjan Algorithm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来 ...
- Wannafly挑战赛13 zzf的好矩阵 题解 答案解释
Wannafly挑战赛13 zzf的好矩阵 题解 文章目录 Wannafly挑战赛13 zzf的好矩阵 题解 分析 结论1 结论2 结论3 C数组对应带子说明 空白长度论述 后续黑色长度论述 能&qu ...
随机推荐
- 基于C+OpenCV4.0的LineSegmentDetector算法实现
简单记录LSD算法的实现过程,当做备忘录用,如有问题欢迎指出和讨论 LSD的基本实现流程是计算出图像的梯度和场方向,然后对梯度进行排序,然后从大到小进行区域增长,之后对增长得到的区域求最小外接矩形,如 ...
- LeetCode 446. Arithmetic Slices II - Subsequence
原题链接在这里:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ 题目: A sequence of numbers is ...
- vue的操作:使用手机访问电脑的页面做法如下:
安装好node.js 和 npm 后,配置好路由,且可以在电脑中正常访问页面时, 只要修改我的项目:my-project 下面的config--->index.js--->里面的 host ...
- springcloud(二)
springcloud路由网关 一.什么是网关 Zuul的主要功能是路由转发和过滤器.路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务.zu ...
- (11)Go方法/接收者
方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. 方法的定义格式如 ...
- Nessus简单使用
1.更新插件 上次搭建完后总觉得不踏实,因为老是提示插件多久没更新了,然后果断花了1.25美刀买了台vps,终于把最新的插件下载下来了,总共190M,需要的QQ私信我.
- Django入门——《Python编程从入门到实践》
Django是一个Web框架--一套用于帮助开发交互式网站的工具.Django能够响应网页请求,还能让你更轻松地读写数据库.管理用户等. 1.建立项目 开始编写一个名为"学习笔记" ...
- EMQ 与 mqtt 与 IOT设备
1.IOT设备的特性 IOT(物联网things of internet)设备和传统的智能设备有什么区别,笔者总结下的IOT设备有如下特点: 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HT ...
- RPC接口测试(三) RPC接口测试
RPC接口测试 接口测试主要分HTTP和RPC两类,RPC类型里面以Dubbo较为知名.互联网微服务架构,两种接口都需要做接口测试的,不管是业务测试还是回归测试: Dubbo:Java栈的互联网公司比 ...
- Redis和MongoDB的区别以及应用场景
Redis和MongoDB的区别以及应用场景 项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB. 最近又想起为什么用MongoDB ...