题面

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的难题(有源汇上下界最大流)相关推荐

  1. BZOJ.3698.XWW的难题(有源汇上下界最大流ISAP)

    题目链接 按套路行列作为两部分,连边 \(S->row->column->T\). S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap( ...

  2. 3698: XWW的难题 有源汇上下界最大流

    有源汇上下界最大流,行列建图,下界为ai,ja_{i,j},上界为ai,j+1a_{i,j}+1,跑的飞起. 不要忘记判断上取整下取整相同的情况. #include<iostream> # ...

  3. 3698: XWW的难题[有源汇上下界最大流]

    3698: XWW的难题 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 354  Solved: 178 [Submit][Status][Disc ...

  4. BZOJ 3698 XWW的难题:有上下界的最大流

    传送门 题意 给你一个 $ n*n $ 的正实数矩阵 $ A $ ,满足XWW性. 称一个 $ n*n $ 的矩阵满足XWW性当且仅当: $ A[n][n] = 0 $ 矩阵中每行的最后一个元素等于该 ...

  5. 【bzoj3698】XWW的难题 有源汇上下界网络流最大流

    Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N* ...

  6. Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)

    描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utop ...

  7. 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流

    学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...

  8. [BZOJ3698]XWW的难题(有源汇上下界最大流+讲解)

    题目: 我是超链接 题解: 建图的话和有源汇可行流一样 求解方法: 在新图上跑ss到tt的最大流(附加源汇) 若新图满流,那么一定存在一种可行流 记此时∑f(s,i)=sum1∑f(s,i)=sum1 ...

  9. bzoj 2406 矩阵——有源汇上下界可行流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 二分答案.把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 ...

最新文章

  1. AI一分钟 | 娃哈哈要造智能汽车?世界顶级机器学习科学家黄恒加盟京东
  2. 实验四 查找和排序算法实现
  3. android activity 渐变,关于Android的径向渐变高级编程的实现
  4. 子空间:群论的角度解释无监督深度学习
  5. 跟着刚哥梳理java知识点——多线程(十六)
  6. char* 赋值 const char* 释放_C/C++编程笔记:C语言中 const 关键字的作用及解析,值得收藏!...
  7. Windows系统下将目录挂载为一个磁盘并分配盘符
  8. 机器学习笔记(十一):优化梯度公式 | 凌云时刻
  9. --legacy-peer-deps 作用
  10. 笔记本连接显示器后没有声音_外接显示器后没声音怎么回事
  11. Android应用中打开微信扫一扫
  12. 重置帆软决策系统用户名密码
  13. java导出excel文件名乱码_Poi生成excel文件名乱码问题的解决方案
  14. nginx防恶意刷新
  15. Linux- 网络配置
  16. 《陈零九的奇幻世界》NFT 系列来啦!
  17. camera face
  18. 半年时间,拍摄8省市10个案例,我们见到了这样的智能中国
  19. Docker入门指南
  20. Dundas Chart for .NET 控件的简单使用

热门文章

  1. Apple quietly slips WebRTC audio, video into Safari's WebKit spec
  2. 怎么在Excel中查找指定文本并标记颜色
  3. 关于mikefile 萌新用法
  4. 前后端分离电商B2C模式之_后端_商品评论功能
  5. 四川高考成绩位次查询2021,211大学2021年四川录取分数线及位次排名
  6. 共享汽车死亡前仆后继,巨头们要排队共赴黄泉?
  7. mysql外连接的含义_MySQL连接查询,内连接,外连接,全连接,交叉连接_cly_32的博客-CSDN博客...
  8. 201612-3-炉石传说
  9. 程序员们纷纷表示“内牛满面”-VS2010视频共5季
  10. Dropout解决过拟合问题