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

题解:
            n行n列分别看成n个点,s为源点,t为汇点.
            s向每一行i连a[i][n]的边.
            每一列i向t连a[n][i]的边.
            每一行i向每一行j连a[i][j]的边.
            这里的a值是有取值范围的.所以就是求有源有汇有上下界的最大流.
            具体求法就是
               1.从t向s连一条inf的边,把图变成无源无汇,
               2.新建源汇S,T,按有上下界的方法建图.
               3.求S,T的最大流,检验如果S连出去的边都满流代表合法.
               4.求s,t的最大流即是答案.
           注意最后答案要乘3,因为一个点会在它这个位置,这一行的末尾,这一列的末尾算三次.
 代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 300
#define M 40000
#define inf 210000000
using namespace std;
int point[N],next[M<<1],n,m,sum,s,t,S,T,cnt=1;
int pre[N],gap[N],dis[N],d[N],cur[N];
double a[N][N];
struct use{int st,en,v;
}e[M<<1];
void add(int x,int y,int v){next[++cnt]=point[x];point[x]=cnt;e[cnt].st=x;e[cnt].en=y;e[cnt].v=v;next[++cnt]=point[y];point[y]=cnt;e[cnt].st=y;e[cnt].en=x;e[cnt].v=0;
}
int isap(int ss,int tt){int mn,u=ss,i,ans(0);gap[0]=tt;for (int i=1;i<=tt;i++) gap[i]=0;for (int i=1;i<=tt;i++) dis[i]=0;for (int i=1;i<=tt;i++) cur[i]=point[i];while (dis[ss]<tt){bool f=false;for (i=cur[u];i;i=next[i]) if (e[i].v&&dis[e[i].en]+1==dis[u]){f=true;cur[u]=i;break;}if (f){pre[u=e[i].en]=i;if (u==tt){ mn=inf;for (int i=tt;i!=ss;i=e[pre[i]].st) mn=min(mn,e[pre[i]].v);ans+=mn;for (int i=tt;i!=ss;i=e[pre[i]].st) e[pre[i]].v-=mn,e[pre[i]^1].v+=mn;u=ss;}}else{gap[dis[u]]--;if (!gap[dis[u]]) return ans;for (mn=tt,i=point[u];i;i=next[i]) if (e[i].v) mn=min(mn,dis[e[i].en]);gap[dis[u]=mn+1]++;cur[u]=point[u];if (u!=ss) u=e[pre[u]].st;}}return ans;
}
void build(){add(t,s,inf);for (int i=1;i<n;i++){if (a[i][n]!=(int)a[i][n]) add(s,i,1);d[s]-=(int)a[i][n];d[i]+=(int)a[i][n];}for (int i=1;i<n;i++){if (a[n][i]!=(int)a[n][i])add(i+n,t,1);d[t]+=(int)a[n][i];d[i+n]-=(int)a[n][i];}  for (int i=1;i<n;i++)for (int j=1;j<n;j++){if (a[i][j]!=(int)a[i][j]) add(i,j+n,1);d[i]-=(int)a[i][j];d[j+n]+=(int)a[i][j];}for (int i=1;i<=t;i++)if (d[i]>0) add(S,i,d[i]),sum+=d[i];else if (d[i]<0) add(i,T,-d[i]);
}
int main(){//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)scanf("%lf",&a[i][j]);s=2*n+1,t=s+1;S=t+1;T=S+1;build();if (isap(S,T)!=sum){printf("No\n");return 0;};printf("%d\n",isap(s,t)*3);
}

【bzoj3698】【XWW的难题】【有上下界的网络流】相关推荐

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

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

  2. [bzoj3698]XWW的难题——有上下界的最大流

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

  3. BZOJ3698 XWW的难题(上下界网络流+gap优化的细节处理)

    XWW给你一个N*N的正实数矩阵A,满足XWW性. 称一个N*N的矩阵满足XWW性当且仅当:(1)A[N][N]=0:(2)矩阵中每行的最后一个元素等于该行前N-1个数的和:(3)矩阵中每列的最后一个 ...

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

    先构建可行流的模型 s−>s->每一行 流量为(a[i][n],a[i][n]+1)(a[i][n],a[i][n]+1) 每一列−>t->t 流量为(a[n][i],a[n] ...

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

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

  6. 【bzoj3698】XWW的难题 有上下界最大流

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

  7. 自己对有上下界的网络流的理解

    首先说一下,什么是上下流,上下流也就是有上下界的网络流,正常的网络流都是只有上界,没有下界,但是当有下界限制的时候就可能出现因不能满足所有下界而无解的情况,这种问题一般分为三种问法,有源/无源可行流判 ...

  8. 有上下界的网络流1-无源汇带上下界网络流SGU194

    有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型:          以前写的最大流默认的下界为0,而这里的下界却 ...

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

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

最新文章

  1. Eclipse中10个最有用的快捷键组合
  2. spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...
  3. 张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”
  4. python2安装pyyaml_Python3安装Pyyaml
  5. PostgreSQL学习笔记4之常用数据类型
  6. 顶级技术大咖,揭秘实时音视频开发的超级风口
  7. “大胃王”吃播注意了 国家明确禁止发布量大多吃、暴饮暴食等节目
  8. Java开发笔记(一百四十三)FXML布局的基本格式
  9. 使用VSCode玩转Java (二)
  10. vue 非父子组件传值
  11. 联想G480笔记本安装系统
  12. 第三章:SCI论文写作经验分享
  13. 存储过程实现报表数据源的利弊分析
  14. spring cache annotation(二)
  15. 电流感应放大器应用技术要点
  16. 计算机标签高低温标准,液晶显示屏高温高湿测试判断标准
  17. 利用conda安装包、卸载包、升级包、查看包信息等操作
  18. 清华大学宪法与行政法学学术硕士考研经验分享
  19. 鲍尔默离开后,微软还能东山再起吗?
  20. UEFI调试网络启动-WINDOWS搭建PXE服务器

热门文章

  1. python egg_python egg 简介
  2. VUE项目获取微信二维码 (返回了的是一个html)
  3. R语言基础知识-学习笔记汇总
  4. win32 api简易实现ftp文件上传
  5. iphone游戏-钢铁侠2 Iron Man评测
  6. WIN二种安装方式UEFI和BIOS方式引导修复
  7. css水墨背景,PS古风水墨背景教程
  8. 决定未来的八大核心科技
  9. Lesson258 - 单调队列
  10. 如何修复老照片?这三个方法建议收藏