BZOJ 4500: 矩阵 差分约束
2024-08-24 08:08:02
题目链接:
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
*/
最新文章
- GetWord 3.3 屏幕取词
- asp.netDataTable导出excel方法(2)
- Linux学习笔记(3)-常用命令
- java和js根据一个或者多个空格截取字符串
- (转)Storm UI 解释
- python语法笔记(七)
- WinHTTP Web Proxy Auto-Discovery Service
- demo_03HTML5中的动画效果
- iOS开发-FFmpeg深入分析
- Centos服务器上NFS灾备环境及KVM的搭建及使用
- Mac系统如何显示隐藏文件?
- 浅谈Static
- iOS之Settings.Bundle的应用
- Mod制作第一个物品
- A Chess Game POJ - 2425
- (转)python-user-agents
- c# yield关键字原理详解
- ACER-4738ZG 拆机改散热
- Linux内核(1) - Kernel地图:Kconfig与Makefile
- iis 部署 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
热门文章
- CentOS编译安装lamp
- 合并多个List<;T>;类型并通过LINQ按指定属性排序
- select @@IDENTITY
- jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。
- C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
- pjax 历史管理 jQuery.History.js
- 巩固一下C语言中的指针
- javascript雪花效果 注释版
- PIL不能关闭文件的解决方案
- 在meteor中如何使用ionic组件tabs,及如何添加使用cordova plugin inappbrower