题目链接

按套路行列作为两部分,连边 \(S->row->column->T\)。
S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap(A[n][i]),对于每个元素(i,j)由行i向列j连边cap(A[i][j]).
考虑我们建的这张图实际流量是什么,对于 \(S->Row_i->(i,j)->Col_j->T\),设这是x的流量,实际表示A[i][n]多加了x,A[i][j]多加了x,A[n][i]多加了x;
答案要求整个矩阵,所以最后的最大流*3即可。
有源汇上下界不需要再统计每条边的流量下限了,因为有一条T->S的边,在第一次求最大流时所有边的流量下限已经加到反向边S->T上了,所以第二次直接求S->T最大流即可。

//60476kb   92ms
#include <cstdio>
#include <algorithm>
const int N=1e6,M=1e6,INF=0x3f3f3f3f;int n,src,des,dgr[N],Enum,cur[N],H[N],fr[M<<1],to[M<<1],nxt[M<<1],cap[M<<1],lev[N],num[N],q[N],pre[N];
double A[103][103];
bool inq[N];inline void AddEdge(int u,int v,int w)
{if(w)to[++Enum]=v, fr[Enum]=u, nxt[Enum]=H[u], H[u]=Enum, cap[Enum]=w,to[++Enum]=u, fr[Enum]=v, nxt[Enum]=H[v], H[v]=Enum, cap[Enum]=0;
}
bool BFS()
{for(int i=0; i<des; ++i) lev[i]=des+1;q[0]=des, lev[des]=0; int h=0,t=1;while(h<t){int x=q[h++];for(int i=H[x]; i; i=nxt[i])if(lev[to[i]]==des+1 && cap[i^1])lev[to[i]]=lev[x]+1, q[t++]=to[i];}return lev[src]<=des;
}
int Augment()
{int mn=INF;for(int i=des; i!=src; i=fr[pre[i]])mn=std::min(mn,cap[pre[i]]);for(int i=des; i!=src; i=fr[pre[i]])cap[pre[i]]-=mn, cap[pre[i]^1]+=mn;return mn;
}
int ISAP()
{if(!BFS()) return 0;for(int i=0; i<=des; ++i) ++num[lev[i]],cur[i]=H[i];int x=src,res=0;while(lev[src]<=des){if(x==des) x=src,res+=Augment();bool can=0;for(int i=cur[x]; i; i=nxt[i])if(lev[to[i]]==lev[x]-1 && cap[i]){can=1, cur[x]=i, pre[x=to[i]]=i;break;}if(!can){int mn=des;for(int i=H[x]; i; i=nxt[i])if(cap[i]) mn=std::min(mn,lev[to[i]]);if(!--num[lev[x]]) break;++num[lev[x]=mn+1];cur[x]=H[x];if(x!=src) x=fr[pre[x]];}}return res;
}int main()
{
//  freopen("1.in","r",stdin);scanf("%d",&n);int S=0, T=n<<1|1; Enum=1, src=S, des=T;for(int i=1; i<=n; ++i)for(int j=1; j<=n; ++j) scanf("%lf",&A[i][j]);int res=0;for(int i=1; i<n; ++i) dgr[src]-=(int)A[i][n],dgr[i]+=(int)A[i][n], AddEdge(src,i,(A[i][n]-(int)A[i][n])>0);for(int i=1; i<n; ++i) dgr[i+n]-=(int)A[n][i],dgr[des]+=(int)A[n][i], AddEdge(i+n,des,(A[n][i]-(int)A[n][i])>0);for(int i=1; i<n; ++i)for(int j=1; j<n; ++j)dgr[i]-=(int)A[i][j],dgr[j+n]+=(int)A[i][j], AddEdge(i,j+n,(A[i][j]-(int)A[i][j])>0);int SS=des+1,TT=des+2; src=SS, des=TT;for(int i=S; i<=T; ++i)if(dgr[i]>0) dgr[SS]+=dgr[i],AddEdge(SS,i,dgr[i]);else if(dgr[i]<0) AddEdge(i,TT,-dgr[i]);AddEdge(T,S,INF);if(ISAP()==dgr[SS]) src=S,des=T,printf("%d",3*ISAP());else printf("No");return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8605679.html

BZOJ.3698.XWW的难题(有源汇上下界最大流ISAP)相关推荐

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

    有源汇上下界最大流,行列建图,下界为ai,ja_{i,j},上界为ai,j+1a_{i,j}+1,跑的飞起. 不要忘记判断上取整下取整相同的情况. #include<iostream> # ...

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

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

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

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

  4. 【bzoj3698】XWW的难题 有源汇上下界网络流最大流

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

  5. Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)

    描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utop ...

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

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

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

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

  8. [BZOJ3698]XWW的难题(有源汇上下界最大流+讲解)

    题目: 我是超链接 题解: 建图的话和有源汇可行流一样 求解方法: 在新图上跑ss到tt的最大流(附加源汇) 若新图满流,那么一定存在一种可行流 记此时∑f(s,i)=sum1∑f(s,i)=sum1 ...

  9. bzoj 2406 矩阵——有源汇上下界可行流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 二分答案.把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 ...

最新文章

  1. STM32系统滴答定时器(systick)应用
  2. wordpress 表格文字对齐_Word文字对齐还用空格键?OUT了,这3个文字对齐方式你值得拥有!...
  3. 亚伦•斯沃茨:提升时间的品质
  4. 那个拒绝北大教授,却坚持留在美国做服务员的数学天才,现状如何
  5. JAVA的StringBuffer类详解
  6. Redis集群的原理和搭建
  7. c语言从入门到精通的几个阶段
  8. 为什么图片保存类型360 se html document,360安全浏览器为什么图片不显示保存
  9. 大白菜方式制作win10 PE启动U盘
  10. Day03 车牌识别
  11. python爬取网页数据总结_pycharm爬取网页数据
  12. 鸿蒙系统可以装微信,网友:让腾讯支持华为,微信专用鸿蒙系统,安卓:你说啥?...
  13. Unity(入门、中级、中高级、高级)
  14. 苹果电脑如何打印文件
  15. python 爬虫及数据可视化展示
  16. 关系数据库的完整性约束:实体完整性、参照完整性、用户自定义完整性
  17. Docker报错Error spawning command line “dbus-launch --autolaunch=xxx --binary-syntax --close-stderr”
  18. Parse 使用教程之一
  19. vue广告栏上下滚动效果
  20. 欧美商务画册风公司介绍

热门文章

  1. 新东方php面试题,新东方学校各教师面试题和笔试题及答案(9套)
  2. SWPUACM第二次周赛
  3. Paddle实现NLP-文本分类
  4. 宝塔linux搭建环境注意事项
  5. 【Leetcode】98. 验证二叉搜索树
  6. golang RWMutex读写互斥锁源码分析
  7. Apple Watch新玩法:手势操控无人机
  8. 使用STL中的list容器实现单链表的操作
  9. tomcat 点击startup.bat一闪而过
  10. mii-tool查看网卡状态