显然是有源有汇有下界最大流,不刷不知道,一刷吓一跳
发现了我之前求有源有汇有下界最大流的错误,具体见我那篇介绍有下界的网络流的解题报告(bzoj2502),已经更正

 const inf=;
type node=record
po,next,flow:longint;
end; var e:array[..] of node;
pre,p,numh,h,cur,d:array[..] of longint;
a:array[..,..] of double;
len,tot,i,j,n,s,t,ss,tt:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure add(x,y,f:longint);
begin
inc(len);
e[len].po:=y;
e[len].flow:=f;
e[len].next:=p[x];
p[x]:=len;
end; procedure build(x,y,f:longint);
begin
add(x,y,f);
add(y,x,);
end; function sap(s,t:longint):longint;
var u,neck,tmp,i,j,q:longint;
begin
fillchar(numh,sizeof(numh),);
fillchar(h,sizeof(h),);
for i:= to tt do
cur[i]:=p[i];
u:=s;
sap:=;
numh[]:=tt+;
neck:=inf;
while h[s]<tt+ do
begin
d[u]:=neck;
i:=cur[u];
while i<>- do
begin
j:=e[i].po;
if (e[i].flow>) and (h[u]=h[j]+) then
begin
neck:=min(neck,e[i].flow);
cur[u]:=i;
pre[j]:=u;
u:=j;
if u=t then
begin
sap:=sap+neck;
while u<>s do
begin
u:=pre[u];
j:=cur[u];
dec(e[j].flow,neck);
inc(e[j xor ].flow,neck);
end;
neck:=inf;
end;
break;
end;
i:=e[i].next;
end;
if i=- then
begin
dec(numh[h[u]]);
if numh[h[u]]= then exit;
q:=-;
tmp:=tt;
i:=p[u];
while i<>- do
begin
j:=e[i].po;
if e[i].flow> then
if h[j]<tmp then
begin
q:=i;
tmp:=h[j];
end;
i:=e[i].next;
end;
cur[u]:=q;
h[u]:=tmp+;
inc(numh[h[u]]);
if u<>s then
begin
u:=pre[u];
neck:=d[u];
end;
end;
end;
end; begin
len:=-;
fillchar(p,sizeof(p),);
readln(n);
dec(n);
s:=; t:=*n+; ss:=*n+; tt:=*n+;
for i:= to n+ do
for j:= to n+ do
read(a[i,j]);
for i:= to n do
begin
if a[i,n+]<>trunc(a[i,n+]) then
build(s,i,);
d[i]:=d[i]+trunc(a[i,n+]);
d[s]:=d[s]-trunc(a[i,n+]);
if a[n+,i]<>trunc(a[n+,i]) then
build(i+n,t,);
d[i+n]:=d[i+n]-trunc(a[n+,i]);
d[t]:=d[t]+trunc(a[n+,i]);
end;
for i:= to n do
for j:= to n do
begin
if trunc(a[i,j])<>a[i,j] then build(i,j+n,);
d[i]:=d[i]-trunc(a[i,j]);
d[j+n]:=d[j+n]+trunc(a[i,j]);
end;
for i:=s to t do
if d[i]> then
begin
build(ss,i,d[i]);
tot:=tot+d[i];
end
else if d[i]< then build(i,tt,-d[i]);
build(t,s,inf);
if sap(ss,tt)<>tot then writeln('No')
else writeln(sap(s,t)*);
end.

bzoj3698的更多相关文章

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

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

  2. bzoj3698 XWW的难题

    题意:给你个n * n的实数矩阵,你需要把它中的每个数上/下取整,并满足如下条件: 每行最后一个数等于前面的和. 每列最后一个数等于前面的和. n行n列的那个元素始终为0,不予考虑. 求满足条件下矩阵 ...

  3. [BZOJ3698]XWW的难题解题报告|上下界网络流|有源汇最大流

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

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

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

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

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

随机推荐

  1. JavaScript基础-面向对象编程<1>

    1.1 函数与对象  1.定义函数的方式定义类 定义类的方法: function class1(){ //类成员的定义及构造函数部分 } class1既是一个函数,也是一个类. 使用 new 操作符获 ...

  2. Mac 系统下安装 MySql

    Mac原生没有带MySql,想要使用需要自己去安装. 下载. 首先去mysql官网下载安装包. 由于现在mysql对企业有服务,所以有所谓社区版(community)和企业版(enterprise), ...

  3. .net Remoting 的工作原理是什么?

    webservice和.net remoting都是用来通信的框架,它们最大的优点是可以像调用本地对象一样调用远程对象 区别:1.webservice是用的应用层协议http封装的,所以它可以被很多其 ...

  4. JS 立即执行的函数表达式(function)写法

    1. 正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function ...

  5. less的使用方法

    LESS学习 1.变量 我们可以把一个css样式的值赋给一个参数,然后再设置样式的时候只需要设置这个参数名,如果要修改,就改参数的值就可以了. demo.html <!DOCTYPE html& ...

  6. wpf 只在window是ShowDialog打开时才设置DialogResult

    //only set DialogResult when window is ShowDialog before if(System.Windows.Interop.ComponentDispatch ...

  7. poj 1818 ATP

    ATP 题意:足球锦标赛使用二分的策略,每次淘汰剩下人的一半,并且数据表明:排名相差k(include)之内的运动员,胜负难料,否则排名前的必定战胜排名后的:问给定n(n = 2x, x∈N, n & ...

  8. asp.net mvc 事务处理:Transactions

    1.在控制器里引用using System.Transactions; 2.在你需要事务回滚的地方外面套一层using (TransactionScope sc = new TransactionSc ...

  9. 设置Tomcat应用自动部署目录

    只需要在Tomcat/conf目录下面新建文件夹Catalina/localhost,然后再localhost文件夹下面新建一个[应用名字.xml]文件即可,有多少个应用就新建多少个xml文件即可,x ...

  10. MVC-Model数据注解(三)-Remote验证的一个注意事项

    首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制,这个可以通过StringLength特性来解决:同时还需要验证用户名不能重复,这个就需要 ...