BZOJ 4500: 矩阵 差分约束
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=4500
题解:
从行向列建边,代表一个格子a[i][j],对每个顶点的所有操作可以合并在一起用sum[xi]表示,
那么题目相当于是要求sum[xi]+sum[xj]==a[xi][xj];
等价于:sum[xj]-(-sum[xi])==a[xi][xj]
等价于:sum[xj]-sum'[xi]<=a[xi][xj] && sum[xj]-sum'[xi]>=a[xi][xj]
等价于:sum[xj]<=sum'[xi]+w && sum'[xi]<=sum[xj]+(-w)
所有就可以用差分约束来做了。跑一遍最短路,判一下负环就可以了。
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<vector>
- #include<queue>
- using namespace std;
- const int maxn = ;
- const int INF = 0x3f3f3f3f;
- struct Edge {
- int v, w;
- Edge(int v, int w) :v(v), w(w) {}
- Edge() {}
- };
- int n, m,k;
- vector<Edge> egs;
- vector<int> G[maxn];
- void addEdge(int u, int v, int w) {
- G[u].push_back(egs.size());
- egs.push_back(Edge(v,w));
- }
- bool inq[maxn];
- int cnt[maxn];
- int d[maxn];
- bool spfa() {
- memset(inq, , sizeof(inq));
- memset(cnt, , sizeof(cnt));
- for (int i = ; i <= n + m; i++) d[i] = INF;
- queue<int> Q;
- d[] = ; inq[] = true; Q.push();
- while (!Q.empty()) {
- int u = Q.front(); Q.pop();
- inq[u] = false;
- for (int i = ; i < G[u].size(); i++) {
- Edge& e = egs[G[u][i]];
- if (d[e.v] > d[u] + e.w) {
- d[e.v] = d[u] + e.w;
- if (!inq[e.v]) {
- Q.push(e.v);
- inq[e.v] = true;
- if (++cnt[e.v] > n+m+) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- void init() {
- for (int i = ; i <= n + m; i++) G[i].clear();
- egs.clear();
- }
- int main() {
- int tc;
- scanf("%d", &tc);
- while (tc--) {
- scanf("%d%d%d", &n, &m, &k);
- init();
- for (int i = ; i < k; i++) {
- int u, v, w;
- scanf("%d%d%d", &u, &v, &w);
- addEdge(u, v+n, w);
- addEdge(v+n, u, -w);
- }
- for (int i = ; i <= n + m; i++) {
- addEdge(, i, );
- }
- if (spfa()) {
- puts("Yes");
- }
- else {
- puts("No");
- }
- }
- return ;
- }
- /*
- 2
- 2 2 4
- 1 1 0
- 1 2 0
- 2 1 2
- 2 2 2
- 2 2 4
- 1 1 0
- 1 2 0
- 2 1 2
- 2 2 1
- */
BZOJ 4500: 矩阵 差分约束的更多相关文章
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值, ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...
- bzoj 4500: 矩阵【差分约束】
(x,y,z)表示格子(x,y)的值为z,也就是x行+y列加的次数等于z,相当于差分约束的条件,用dfs判断冲突即可. #include<iostream> #include<cst ...
- 【BZOJ 4500 矩阵】
Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 390 Solved: 217[Submit][Status][Discuss] Description ...
- BZOJ 4500: 矩阵
4500: 矩阵 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 326 Solved: 182[Submit][Status][Discuss] De ...
- bzoj 4500 矩阵 题解
题意: 有一个 $ n * m $ 的矩阵,初始每个格子的权值都为 $ 0 $,可以对矩阵执行两种操作: 选择一行,该行每个格子的权值加1或减1. 选择一列,该列每个格子的权值加1或减1. 现在有 $ ...
- BZOJ 2330 糖果 差分约束求最小值
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2330 题目大意: 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果 ...
- BZOJ 4500: 矩阵 带权并查集
这个思路挺巧妙的 ~ 定义一行/列的权值为操作后所整体增加的值. 那么,我们会有若干个 $a[x]+b[y]=c$ 的限制条件. 但是呢,我们发现符号是不能限制我们的(因为可加可减) 所以可以将限制条 ...
- 【BZOJ4500】矩阵(差分约束)
[BZOJ4500]矩阵(差分约束) 题面 BZOJ 然而权限题 题解 显然拆分行和列.不妨设这一行/列总共加减的值是\(p\),那么每一个限制就是两个数的和为一个特定的数.这样子不好做,反正是一个二 ...
随机推荐
- C#读取xlsx文件Excel2007
读取Excel 2007的xlsx文件和读取老的.xls文件是一样的,都是用Oledb读取,仅仅连接字符串不同而已. 具体代码实例: public static DataTable GetExcelT ...
- responseXML 属性
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...
- 转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789
相关文章: http://www.360doc.com/content/13/1003/23/14070959_318861279.shtml http://www.360doc.com/conten ...
- IntelliJ IDEA 13破解(JRebel 5.6.3a破解)
首先安装IntelliJ 13,记得要下载Ultimate Edition版本,不然就不需要破解了.. 安装到本地,然后进行一些配置(这一步可以不要,但是考虑到以后换系统可以省事,推荐做) 打开{in ...
- 5)Java部分常用package功能介绍
1> java.lang (package) 这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可以使用的Package 包中关键类 ...
- FireFox Prevent this page from creating addtional dialogs 火狐浏览器 设置 阻止此页面创建更多对话框
FireFox英文版本老弹出“Prevent this page from creating addtional dialogs”的确认框 FireFox english version alert ...
- Oracle 分区表的统计信息实例
ORACLE的统计信息在执行SQL的过程中扮演着非常重要的作用,而且ORACLE在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息.下面通过一个复合分区表来说明一些 ...
- spark 集合交集差集运算
intersect except是spark提供的集合差集运算, 但是要求参与运算的两个dataframe,有相同的data Schema. 如果我想从 集合1(attribute1, attribu ...
- 比较C++中的4种类型转换方式
C++的四种cast操作符的区别并非我的原创-------------------------------------------from:http://blog.csdn.net/hrbeuwhw/ ...
- python 序列化之JSON和pickle详解
JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...