Description

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中的元素之和尽量大。

Input

第一行一个整数N,N ≤ 100。
接下来N行每行包含N个绝对值小于等于1000的实数,最多一位小数。

Output

输出一行,即取整后A矩阵的元素之和的最大值。无解输出No。

Sample Input

4
3.1 6.8 7.3 17.2
9.6 2.4 0.7 12.7
3.6 1.2 6.5 11.3
16.3 10.4 14.5 0

Sample Output

129

HINT

【数据规模与约定】

有10组数据,n的大小分别为10,20,30...100。

【样例说明】

样例中取整后满足XWW性的和最大的矩阵为:

3 7 8 18

10 3 0 13

4 1 7 12

17 11 15 0

/*上下界最大流。建立源点SS,从SS向i连一条上下界为(floor(a[i][n]),ceil(a[i][n]))的边;建立源点TT,从i'向TT连一条上下界为(floor(a[n][i]),ceil(a[n][i]))的边;建立i->i'上下界为(floor(a[i][j]),ceil(a[i][j]))的边。跑上下界最大流。
*/
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#define N 210
#define M 21000
#define inf 1000000000
using namespace std;
int down[N][N],up[N][N],head[N],dis[N],s[N],n,cnt=1,SS,TT,S,T;
struct node{int v,f,pre;}e[M];
queue<int> q;
void add(int u,int v,int f){e[++cnt].v=v;e[cnt].f=f;e[cnt].pre=head[u];head[u]=cnt;e[++cnt].v=u;e[cnt].f=0;e[cnt].pre=head[v];head[v]=cnt;
}
bool bfs(){memset(dis,-1,sizeof(dis));q.push(S);dis[S]=0;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].pre){if(!e[i].f||dis[e[i].v]!=-1) continue;dis[e[i].v]=dis[u]+1;q.push(e[i].v);}}return dis[T]!=-1;
}
int dinic(int x,int f){int rest=f;if(x==T) return f;for(int i=head[x];i;i=e[i].pre){if(!e[i].f||dis[e[i].v]!=dis[x]+1) continue;int t=dinic(e[i].v,min(rest,e[i].f));e[i].f-=t;e[i^1].f+=t;rest-=t;}if(rest==f) dis[x]=-1;return f-rest;
}
int main(){scanf("%d",&n);SS=n*2+1;TT=n*2+2;S=n*2+3;T=n*2+4;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){double x;scanf("%lf",&x);down[i][j]=int(x);up[i][j]=int(x+0.99);}for(int i=1;i<n;i++){if(down[i][n]!=up[i][n]) add(SS,i,1);if(down[n][i]!=up[n][i]) add(i+n,TT,1);s[SS]+=down[i][n];s[i]-=down[i][n];s[i+n]+=down[n][i];s[TT]-=down[n][i];}for(int i=1;i<n;i++)for(int j=1;j<n;j++){if(down[i][j]!=up[i][j]) add(i,j+n,1);s[i]+=down[i][j];s[j+n]-=down[i][j];}int tot=0;for(int i=1;i<=T;i++){if(s[i]>0) add(i,T,s[i]),tot+=s[i];if(s[i]<0) add(S,i,-s[i]);}add(TT,SS,inf);int maxflow=0;while(bfs()) maxflow+=dinic(S,inf);if(maxflow!=tot) {printf("No");return 0;}maxflow=0;S=SS;T=TT;while(bfs()) maxflow+=dinic(S,inf);printf("%d",maxflow*3);return 0;
}

转载于:https://www.cnblogs.com/harden/p/6629156.html

XWW的难题(bzoj 3698)相关推荐

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

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

  2. [BZOJ3698] XWW的难题 网络流

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

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

    3698: XWW的难题 Time Limit: 10 Sec  Memory Limit: 128 MB [Submit][Status][Discuss] Description XWW是个影响力 ...

  4. bzoj3698: XWW的难题 有上下界的网络流

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

  5. 【BZOJ3698】XWW的难题 有上下界的最大流

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

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

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

  7. BZOJ 3698(XWW的难题-上下界网络流+经典建模)

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

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

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

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

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

最新文章

  1. 怎样使用Spring Boot项目的单元测试
  2. 机器学习如何彻底改变游戏中的物理模拟
  3. 怎么全量备份oracle数据库,Oracle 数据库全量备份恢复和部分备份恢复 | 学步园...
  4. 我看Chrome超越IE的意义
  5. 求职特训营火热来袭,阿里大咖教你制作专业简历
  6. modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)
  7. Cortex M3存储器映射
  8. 最长单调递增子序列_最长递增子序列(动态规划 + 二分搜索)
  9. 增强的PolyBase SQL 2019-外部表SQL Server,目录视图和下推式
  10. CSS光标属性一览表
  11. linux安装为知笔记本,Scientific Linux 安装 wiznote(为知笔记)
  12. 水调歌头·明月几时有
  13. 如何通过数据驱动业务发展
  14. 标准盒模型和IE盒模型
  15. 阿里P9大佬手写的Java核心开发手册(2022版)覆盖P5到P8所有技术栈
  16. Python 截屏 - lone112 - 博客园
  17. 新浪微博、中关村、蘑菇街、微信、国美、苏宁等各大网站登录js解密例子!
  18. win10 更新1809版后彻底关闭系统自动更新的方法
  19. PDF格式的“在线阅读”和“下载”
  20. 查看Linux的核数和内存等相关系统配置

热门文章

  1. 个人随笔-求学求职-工作经历-计划
  2. 清览云题库--软件工程 ---第9章结构化实现及软件维护练习
  3. 能温柔的时候,请别尖锐
  4. 叶问短线绝招之拨云见日
  5. Bonfire: Slasher Flick
  6. Windows10开机无限蓝屏(SrtTrail.txt)
  7. 加密衍生品赛道异军突起 CBOEX如何做到攻守兼备灵巧破局?
  8. 服务器维护之后大角会刷新吗,魔兽世界大角刷新最具体时间 准确率达95%
  9. Git追加本次提交到上次提交
  10. win下连编socket时[Linker error] undefined reference to XXX