XWW给你一个N*N的正实数矩阵A,满足XWW性。
称一个N*N的矩阵满足XWW性当且仅当:(1)A[N][N]=0;(2)矩阵中每行的最后一个元素等于该行前N-1个数的和;(3)矩阵中每列的最后一个元素等于该列前N-1个数的和。
现在你要给A中的数进行取整操作(可以是上取整或者下取整),使得最后的A矩阵仍然满足XWW性。同时XWW还要求A中的元素之和尽量大。

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

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

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
129

题解

上下界网络流的最大流模板题

有一个小细节:当遇到3.0这种情况时,它无论上取整还是下取整都是3

以为可以A了

然后一直过不了样例

和xmy大佬调了30min

因为有一个极其隐蔽的错误:

SAP在写gap优化的时候要把点数预留准确!!!!

    ans=cap[cnt];S=ss;T=tt;//fir[ss]=nxt[fir[ss]];//fir[tt]=nxt[fir[tt]];cap[cnt]=cap[cnt^1]=0;f();ans+=flow;printf("%d",3*ans);

因为这一段中没有把原来的S和T删掉,所以有可能还会走到原来的源汇点

如果此时点数已经更新为了2*n+2,那么可能导致gap[0]直接减小到为0(因为你可能删2*n+4个点)

所以,要么重新建图,要么把点数预留为原来的点数

(以后再也不用 T 来表示图中点的数目了。。。)

一定要在外面用一个sz来存

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
#define N 505
#define M 400005
const int INF=0x3f3f3f3f;
int fir[N],to[M],nxt[M],cap[M],cnt;
int ind[N],oud[N],sum;
void adde(int a,int b,int l,int r)
{to[++cnt]=b;nxt[cnt]=fir[a];fir[a]=cnt;cap[cnt]=r-l;to[++cnt]=a;nxt[cnt]=fir[b];fir[b]=cnt;cap[cnt]=0;ind[b]+=l;oud[a]+=l;
}
int S,T,flow,d[N],vd[N];
int sz;
int sap(int u,int aug)
{if(u==T) return aug;int ret=0,tmp,mind=sz-1;for(int v,p=fir[u];p;p=nxt[p]){v=to[p];if(cap[p]>0){if(d[u]==d[v]+1){tmp=sap(v,min(cap[p],aug));aug-=tmp;cap[p]-=tmp;ret+=tmp;cap[p^1]+=tmp;if(d[S]>=sz) return ret;if(aug==0) break;}mind=min(mind,d[v]);}}if(ret==0){vd[d[u]]--;if(!vd[d[u]])d[S]=sz;d[u]=mind+1;vd[d[u]]++;}return ret;
}
void f()
{memset(d,0,sizeof(d));memset(vd,0,sizeof(vd));sz=2*n+4;vd[0]=sz;flow=0;while(d[S]<sz)flow+=sap(S,INF);
}
int l[N][N],r[N][N];
int main()
{cnt=1;int i,j;float x;scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%f",&x);l[i][j]=int(floor(x));r[i][j]=int(ceil(x));}n--;int ss=2*n+1,tt=2*n+2;S=2*n+3;T=2*n+4;for(i=1;i<=n;i++){adde(ss,i,l[i][n+1],r[i][n+1]);adde(i+n,tt,l[n+1][i],r[n+1][i]);for(j=1;j<=n;j++)adde(i,j+n,l[i][j],r[i][j]);}for(i=1;i<=2*n+2;i++){if(ind[i]>oud[i]){adde(S,i,0,ind[i]-oud[i]);sum+=ind[i]-oud[i];}if(ind[i]<oud[i]) adde(i,T,0,oud[i]-ind[i]);}adde(tt,ss,0,INF);//printf("%d\n",cnt);int ans=0;f();if(flow!=sum){printf("No");return 0;}ans=cap[cnt];S=ss;T=tt;//fir[ss]=nxt[fir[ss]];//fir[tt]=nxt[fir[tt]];cap[cnt]=cap[cnt^1]=0;f();ans+=flow;printf("%d",3*ans);
}

BZOJ3698 XWW的难题(上下界网络流+gap优化的细节处理)相关推荐

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

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

  2. 【BZOJ】3698:XWW的难题-上下界网络流

    题解 下界为各数下取整的值,取差建立超级源汇点SS,TT跑一遍dinic,先判断是否可以满流,然后再跑原图,ans*3(原值算一遍,右边算一遍,下边算一遍) 详见代码 代码 #include<c ...

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

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

  4. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...

  5. HDU 4940 Destroy Transportation system(无源汇上下界网络流)

    Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...

  6. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

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

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

  8. 【有上下界网络流】【ZOJ】2314 Reactor Cooling

    [算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...

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

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

最新文章

  1. 浅析机器学习中的自由度
  2. nc65数据字典 云盘_从搜索引擎到核心交易数据库,详解阿里云神龙如何支撑双11...
  3. UI常见测试用例-51testing
  4. Blueprint的实现
  5. java装箱与拆箱_【转】java 自动装箱与拆箱
  6. Hadoop中Yarnrunner里面submit Job以及AM生成 至Job处理过程源码解析
  7. 微软一个关于team editon vs 2005文章的集锦页面
  8. POI介绍及视频教程
  9. 养老院智能健康手环开发/功能/特点/结构/原理
  10. linux报错ora12514,ORA-12514:RMAN连接报错解决
  11. Android微信抢红包服务源码
  12. 基于单片机的水壶自动加热系统_基于单片机电热水壶控制系统的设计
  13. 「读书笔记」第五项修炼-学习型组织的艺术与实践(一)
  14. android edittext禁止输入特殊字符,Android edittext 禁止输入特殊字符/或者表情符的方案...
  15. C++Primer 第9章 顺序容器
  16. flask html下拉列表,用Flask框架作两个关联式的下拉式选单,抓取资料库资料
  17. 通过SVG进行画出雷达扫描图
  18. Day3--搭建微信公众号管理系统
  19. HTML5适合的情人节礼物有纪念日期功能
  20. 系统性学习go gmp模型

热门文章

  1. html给页面整体添加左右边距_打印html页面时的边距
  2. egg入门指引,你绝对用得到
  3. 漫反射:兰伯特和半兰伯特
  4. C++基础入门知识学习(通俗详细讲解)
  5. 面向对象——类与对象的概念
  6. 罗素的理发师和奥卡姆剃刀
  7. 数据分析师是否是青春饭,对年龄有限制吗?
  8. 《深入理解Java虚拟机(第2版)》-笔记
  9. apk 路由器劫持_一种在路由器上防止网页劫持的方法与流程
  10. 天数最少的年份_年月日格式有哪几种 年、月、日