题目链接:

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
*/

最新文章

  1. GetWord 3.3 屏幕取词
  2. asp.netDataTable导出excel方法(2)
  3. Linux学习笔记(3)-常用命令
  4. java和js根据一个或者多个空格截取字符串
  5. (转)Storm UI 解释
  6. python语法笔记(七)
  7. WinHTTP Web Proxy Auto-Discovery Service
  8. demo_03HTML5中的动画效果
  9. iOS开发-FFmpeg深入分析
  10. Centos服务器上NFS灾备环境及KVM的搭建及使用
  11. Mac系统如何显示隐藏文件?
  12. 浅谈Static
  13. iOS之Settings.Bundle的应用
  14. Mod制作第一个物品
  15. A Chess Game POJ - 2425
  16. (转)python-user-agents
  17. c# yield关键字原理详解
  18. ACER-4738ZG 拆机改散热
  19. Linux内核(1) - Kernel地图:Kconfig与Makefile
  20. iis 部署 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序

热门文章

  1. CentOS编译安装lamp
  2. 合并多个List&lt;T&gt;类型并通过LINQ按指定属性排序
  3. select @@IDENTITY
  4. jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。
  5. C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
  6. pjax 历史管理 jQuery.History.js
  7. 巩固一下C语言中的指针
  8. javascript雪花效果 注释版
  9. PIL不能关闭文件的解决方案
  10. 在meteor中如何使用ionic组件tabs,及如何添加使用cordova plugin inappbrower