BZOJ 3698: XWW的难题(有源汇上下界最大流)
题面
XWW是个影响力很大的人,他有很多的追随者。这些追随者都想要加入XWW教成为XWW的教徒。但是这并不容易,需要通过XWW的考核。
XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A,满足XWW性。
称一个N*N的矩阵满足XWW性当且仅当:(1)A[N][N]=0;(2)矩阵中每行的最后一个元素等于该行前N-1个数的和;(3)矩阵中每列的最后一个元素等于该列前N-1个数的和。
现在你要给A中的数进行取整操作(可以是上取整或者下取整),使得最后的A矩阵仍然满足XWW性。同时XWW还要求A中的元素之和尽量大。
题解
首先题目描述有误,A[N][N]不满足(2),(3)
然后上下取整就是上下界,直接上下界最大流。
CODE
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cmath>
#include <queue>
using namespace std;
template<class T>inline void read(T &x) {char ch; int flg = 1; while(!isdigit(ch=getchar()))if(ch=='-')flg=-flg;for(x=ch-'0';isdigit(ch=getchar());x=x*10+ch-'0');x*=flg;
}
const int MAXN = 220;
const int MAXM = 12000;
const int inf = 1000000000;
int n, out[MAXN], in[MAXN];
int info[MAXN], fir[MAXN], to[MAXM<<1], nxt[MAXM<<1], c[MAXM<<1], cnt = 1;
inline void link(int u, int v, int cc, int rc=0) {to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt; c[cnt] = cc;to[++cnt] = u; nxt[cnt] = fir[v]; fir[v] = cnt; c[cnt] = rc;
}
int S, T, dis[MAXN];
queue<int>q; bool vis[MAXN];
bool bfs() {memset(dis, -1, sizeof dis);dis[S] = 0; q.push(S);while(!q.empty()) {int u = q.front(); q.pop();for(int i = fir[u]; i; i = nxt[i])if(c[i] && !~dis[to[i]])dis[to[i]] = dis[u] + 1, q.push(to[i]);}return ~dis[T];
}
int aug(int u, int Max) {if(u == T) return Max;vis[u] = 1; int flow = 0, delta;for(int v, &i = info[u]; i; i = nxt[i])if(c[i] && !vis[v=to[i]] && dis[v] == dis[u] + 1 && (delta=aug(v, min(Max-flow, c[i])))) {c[i] -= delta, c[i^1] += delta, flow += delta;if(flow == Max) break;}vis[u] = 0; return flow;
}
int Maxflow(int s, int t) {int re = 0; S = s, T = t;while(bfs()) memcpy(info, fir, sizeof info), re += aug(S, inf);return re;
}
inline void add(int u, int v, int ll, int rr) {link(u, v, rr-ll);in[v] += ll;out[u] += ll;
}
int rid[105], cid[105], l[105][105], r[105][105];
int main () {read(n); int tot = 0, ans = 0;for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j) {double x;scanf("%lf", &x);l[i][j] = floor(x);r[i][j] = ceil(x);}for(int i = 1; i < n; ++i) rid[i] = ++tot;for(int i = 1; i < n; ++i) cid[i] = ++tot;int s = ++tot, t = ++tot, ss = ++tot, tt = ++tot;for(int i = 1; i < n; ++i) add(s, rid[i], l[i][n], r[i][n]);for(int j = 1; j < n; ++j) add(cid[j], t, l[n][j], r[n][j]);for(int i = 1; i < n; ++i)for(int j = 1; j < n; ++j) add(rid[i], cid[j], l[i][j], r[i][j]);int sum = 0;for(int i = 1; i < ss; ++i) {if(in[i]>out[i]) link(ss, i, in[i]-out[i]), sum += in[i]-out[i];if(in[i]<out[i]) link(i, tt, out[i]-in[i]);}link(t, s, inf, 0);sum -= Maxflow(ss, tt);if(sum) puts("No");else {ans = c[cnt];c[cnt] = c[cnt^1] = 0;ans += Maxflow(s, t);printf("%d\n", ans*3);}
}
BZOJ 3698: XWW的难题(有源汇上下界最大流)相关推荐
- BZOJ.3698.XWW的难题(有源汇上下界最大流ISAP)
题目链接 按套路行列作为两部分,连边 \(S->row->column->T\). S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap( ...
- 3698: XWW的难题 有源汇上下界最大流
有源汇上下界最大流,行列建图,下界为ai,ja_{i,j},上界为ai,j+1a_{i,j}+1,跑的飞起. 不要忘记判断上取整下取整相同的情况. #include<iostream> # ...
- 3698: XWW的难题[有源汇上下界最大流]
3698: XWW的难题 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 354 Solved: 178 [Submit][Status][Disc ...
- BZOJ 3698 XWW的难题:有上下界的最大流
传送门 题意 给你一个 $ n*n $ 的正实数矩阵 $ A $ ,满足XWW性. 称一个 $ n*n $ 的矩阵满足XWW性当且仅当: $ A[n][n] = 0 $ 矩阵中每行的最后一个元素等于该 ...
- 【bzoj3698】XWW的难题 有源汇上下界网络流最大流
Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N* ...
- Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)
描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utop ...
- 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流
学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...
- [BZOJ3698]XWW的难题(有源汇上下界最大流+讲解)
题目: 我是超链接 题解: 建图的话和有源汇可行流一样 求解方法: 在新图上跑ss到tt的最大流(附加源汇) 若新图满流,那么一定存在一种可行流 记此时∑f(s,i)=sum1∑f(s,i)=sum1 ...
- bzoj 2406 矩阵——有源汇上下界可行流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 二分答案.把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 ...
最新文章
- AI一分钟 | 娃哈哈要造智能汽车?世界顶级机器学习科学家黄恒加盟京东
- 实验四 查找和排序算法实现
- android activity 渐变,关于Android的径向渐变高级编程的实现
- 子空间:群论的角度解释无监督深度学习
- 跟着刚哥梳理java知识点——多线程(十六)
- char* 赋值 const char* 释放_C/C++编程笔记:C语言中 const 关键字的作用及解析,值得收藏!...
- Windows系统下将目录挂载为一个磁盘并分配盘符
- 机器学习笔记(十一):优化梯度公式 | 凌云时刻
- --legacy-peer-deps 作用
- 笔记本连接显示器后没有声音_外接显示器后没声音怎么回事
- Android应用中打开微信扫一扫
- 重置帆软决策系统用户名密码
- java导出excel文件名乱码_Poi生成excel文件名乱码问题的解决方案
- nginx防恶意刷新
- Linux- 网络配置
- 《陈零九的奇幻世界》NFT 系列来啦!
- camera face
- 半年时间,拍摄8省市10个案例,我们见到了这样的智能中国
- Docker入门指南
- Dundas Chart for .NET 控件的简单使用
热门文章
- Apple quietly slips WebRTC audio, video into Safari's WebKit spec
- 怎么在Excel中查找指定文本并标记颜色
- 关于mikefile 萌新用法
- 前后端分离电商B2C模式之_后端_商品评论功能
- 四川高考成绩位次查询2021,211大学2021年四川录取分数线及位次排名
- 共享汽车死亡前仆后继,巨头们要排队共赴黄泉?
- mysql外连接的含义_MySQL连接查询,内连接,外连接,全连接,交叉连接_cly_32的博客-CSDN博客...
- 201612-3-炉石传说
- 程序员们纷纷表示“内牛满面”-VS2010视频共5季
- Dropout解决过拟合问题