BZOJ3698 XWW的难题(上下界网络流+gap优化的细节处理)
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。
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
题解
上下界网络流的最大流模板题
有一个小细节:当遇到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优化的细节处理)相关推荐
- BZOJ 3698(XWW的难题-上下界网络流+经典建模)
Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N* ...
- 【BZOJ】3698:XWW的难题-上下界网络流
题解 下界为各数下取整的值,取差建立超级源汇点SS,TT跑一遍dinic,先判断是否可以满流,然后再跑原图,ans*3(原值算一遍,右边算一遍,下边算一遍) 详见代码 代码 #include<c ...
- bzoj3698: XWW的难题 有上下界的网络流
bzoj3698: XWW的难题 Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出 ...
- [BZOJ2502]清理雪道 有上下界网络流(最小流)
2502: 清理雪道 Time Limit: 10 Sec Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...
- HDU 4940 Destroy Transportation system(无源汇上下界网络流)
Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...
- 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流
题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...
- 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流
学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...
- 【有上下界网络流】【ZOJ】2314 Reactor Cooling
[算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...
- 有上下界的网络流1-无源汇带上下界网络流SGU194
有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型: 以前写的最大流默认的下界为0,而这里的下界却 ...
最新文章
- 浅析机器学习中的自由度
- nc65数据字典 云盘_从搜索引擎到核心交易数据库,详解阿里云神龙如何支撑双11...
- UI常见测试用例-51testing
- Blueprint的实现
- java装箱与拆箱_【转】java 自动装箱与拆箱
- Hadoop中Yarnrunner里面submit Job以及AM生成 至Job处理过程源码解析
- 微软一个关于team editon vs 2005文章的集锦页面
- POI介绍及视频教程
- 养老院智能健康手环开发/功能/特点/结构/原理
- linux报错ora12514,ORA-12514:RMAN连接报错解决
- Android微信抢红包服务源码
- 基于单片机的水壶自动加热系统_基于单片机电热水壶控制系统的设计
- 「读书笔记」第五项修炼-学习型组织的艺术与实践(一)
- android edittext禁止输入特殊字符,Android edittext 禁止输入特殊字符/或者表情符的方案...
- C++Primer 第9章 顺序容器
- flask html下拉列表,用Flask框架作两个关联式的下拉式选单,抓取资料库资料
- 通过SVG进行画出雷达扫描图
- Day3--搭建微信公众号管理系统
- HTML5适合的情人节礼物有纪念日期功能
- 系统性学习go gmp模型