Description

  • 放假了无聊的小 W 和小 S 在玩游戏。游戏规则是这样的:

  • 现在有个 N × M 的空棋盘,要往格子里摆棋子。每个格子可以摆一个棋子,但是每行每列都有各自的棋子数目的上限和下限。

  • 小 S 提出了个他喜欢的摆放方案,不一定合法,但不会超过上限限制。

  • 小 W 需要找到一个合法的方案,使得跟小 S 的方案状态不同的格子数目最少。一个格子如果在一个方案中摆了棋子,但在另一个方案中没摆棋子,则视为状态不同。两个方案摆放的棋子数目可以不相同。

  • n,m<=50n,m<=50n,m<=50

Solution

  • 非常裸的上下界费用流的问题,注意要优化连边,并不需要每一个格子开一个点,只需要每一行、每一列一个点就好。
  • 但是这题有负权边,会出现负环。

负权图网络流

  • 一种简便的方法是先钦定所有的负权边满流(加入它们的反向边)。那么原图中就只有正权边了。然后需要平衡流量。
  • 建立超级源ss、超级汇tt,类似上下界网络流一样平衡——ss->y,x->tt。
  • 然后跑在新图上最小费用最大流即可消除负环,相当于是平衡流量,从超级源连出去的流量来代替负权边的对应的入度,连向超级汇对应负权边的出度。
  • 在残量网络上再跑一跑。

关于这题

  • 简单粗暴的方法是在原来上下界的超级源和超级汇外再开一个超超级源和超超级汇。消掉负环后再回到原来的图上跑。
  • 但是因为这题的负权边与ss和tt无关,可以把ss当做sss,tt当做ttt。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 105
#define maxm 200005
using namespace std;int n,m,kk,i,j,k,ss,tt,s,t,tot,a[maxn][maxn];
int em,e[maxm],nx[maxm],ls[maxn],cost[maxm],ec[maxm];
int ans;void link(int x,int y,int v,int c){if (c<0){link(y,x,v,-c);link(ss,y,v,0);link(x,tt,v,0);ans+=c*v;} else {em++,e[em]=y; nx[em]=ls[x]; ls[x]=em; ec[em]=v; cost[em]=c;em++,e[em]=x; nx[em]=ls[y]; ls[y]=em; ec[em]=0; cost[em]=-c;}
}void insert(int x,int y,int L,int R,int c){if (L) link(ss,y,L,c),link(x,tt,L,0);if (R-L) link(x,y,R-L,c);
}void build(){em=1,s=++tot,t=++tot,ss=++tot,tt=++tot;for(i=1;i<=n;i++){scanf("%d%d",&j,&k);insert(s,i,j,k,0);}for(i=1;i<=m;i++){scanf("%d%d",&j,&k);insert(n+i,t,j,k,0);}for(i=1;i<=kk;i++) scanf("%d%d",&j,&k),a[j][k]=1;for(i=1;i<=n;i++) for(j=1;j<=m;j++)insert(i,n+j,0,1,(a[i][j])?-1:1);insert(t,s,0,2e9,0);
}int h,w,d[maxm],dis[maxn],fai[maxn],fa[maxn],vis[maxn];
int SPFA(){memset(dis,127,sizeof(dis));memset(vis,0,sizeof(vis));h=0,w=1,d[1]=ss,dis[ss]=0,vis[ss]=1;while (h<w){int x=d[++h];for(i=ls[x];i;i=nx[i]) if (ec[i]&&dis[x]+cost[i]<dis[e[i]]){dis[e[i]]=dis[x]+cost[i];fa[e[i]]=x,fai[e[i]]=i;if (!vis[e[i]]) d[++w]=e[i],vis[e[i]]=1;}vis[x]=0;}return dis[tt]<2e9;
}void maxflow(){while (SPFA()){ans+=dis[tt];for(int x=tt;x!=ss;x=fa[x])ec[fai[x]]--,ec[fai[x]^1]++;}
}int main(){freopen("chess.in","r",stdin);freopen("chess.out","w",stdout);
//  freopen("ceshi.in","r",stdin);
//  freopen("ceshi.out","w",stdout);scanf("%d%d%d",&n,&m,&kk),tot=n+m,ans=kk;build();maxflow();printf("%d",ans);
}

【负权图网络流】JZOJ6169.【GDSOI 2019 day1】棋盘相关推荐

  1. 有负权重边的图可以有拉普拉斯矩阵吗?

    在 看论文Temporal Regularized Matrix Factorization for  High-dimensional Time Series Prediction的时候,看到了这样 ...

  2. 图论算法(三)--最短路径 的Bellman-Flod [ 带负权值图 ] 的解法(JAVA )

    Bellman-Flod算法 对于带有负权值的图,我们已经不能通过Dijkstra算法进行求解了 原因:Dijkstra每次都会找一个距源点(设为s)最近的点,然后将该距离定为这个点到源点的最短路径: ...

  3. Spfa算法(可以求有负权的图)

    S p f a Spfa Spfa s p f a spfa spfa 通常用于求含负权边的单源最短路径,以及判负权环. s p f a spfa spfa 最坏情况下复杂度和朴素 B e l l m ...

  4. [C] Bellman-Ford边松弛:解决负权边

    Bellman-Ford Dijkstra算法是不能解决负权边的,而Bellman-Ford可以完美解决负权边的问题,还可以判断负权回路哦~ Dijkstra算法传送门:Dijkstra算法--通过边 ...

  5. POJ 3259 Wormholes(负权环路)

    题意: 农夫约翰农场里发现了很多虫洞,他是个超级冒险迷,想利用虫洞回到过去,看再回来的时候能不能看到没有离开之前的自己,农场里有N块地,M条路连接着两块地,W个虫洞,连接两块地的路是双向的,而虫洞是单 ...

  6. Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS、深度优先DFS,最短路径SPF、带负权的最短路径Bellman-ford、拓扑排序)

    Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS.深度优先DFS,最短路径SPF.带负权的最短路径Bellman-ford.拓扑排序) 目录 一.图的搜索 1.BFS (Brea ...

  7. dij算法为什么不能处理负权,以及dij算法变种

    对于上面那张图,是可以用dij算法求解出正确答案,但那只是巧合而已. 我们再看看下面这张图. dist[4] 是不会被正确计算的. 因为dij算法认为从队列出来的点,(假设为u)肯定是已经求出最短路的 ...

  8. 差分约束系统之Bellman_Ford与Spfa判断负权回路

    题目:http://poj.org/problem?id=1364 题意:就是简单的差分约束模型. 分析:首先我们必须知道,如果图中存在负权回路,那么差分约束没有可行解.而存在负权回路的条件是:图中某 ...

  9. 图论 —— 环与块 —— 负权环

    [概述] 从一个点出发,经过一条简单路径回到起点,称为图的环,而图的负权环就是环中所有的边的权值均为负值. 所谓负权环问题,就是判断图中是否存在一个环,里面包含的边的边权总和<0 [Bellma ...

最新文章

  1. 号召一下,看有多少人能响应!
  2. 优秀的博客与文章总结链接地址
  3. centos6.6上安装beef
  4. Oracle笔记(十四) 用户管理
  5. 电脑公司 Ghost XP SP3 国庆特别版 v2011.10
  6. 《Linux内核完全注释》《完全剖析》 » 阅读本书所需的基础知识 -- 再次强调。
  7. (38)FPGA面试技能提升篇(C/C++、questasim仿真工具)
  8. Jenkins+GitHub+Xcode+fir搭了一个持续集成环境
  9. Java设计模式之工厂方法模式与抽象工厂模式
  10. Ruby on rails Mac开发 入门笔记(一)
  11. 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
  12. 高通路由器(WIFI)芯片处理器IPQ4029介绍
  13. 人工智能产品经理视频教程
  14. 一流程序员靠数学,二流程序员靠算法,低端看高端就是黑魔法!网友:我是七流靠复制
  15. php插入图片适应屏幕,PHPExcel:如何在首页页眉中插入图片并将其放大以适应其内容?...
  16. 路由 OSPF简介、OSPF与其它路由的区别、OSPF区域概念、OSPF路由代名词IR、BR、ABR、ASBR概念简介。
  17. 2020中国卓越管理公司颁奖晚宴成功举办,四家香港科大EMBA校友企业获奖
  18. 【维修】如何成功做网线?
  19. Ubuntu下系统CPU/内存/GPU/硬盘监控查看指令
  20. 文华期货数据格式公布

热门文章

  1. HM-帧内预测(概述)
  2. 阿里云——学生成长计划领取资格考试
  3. 高中生计算机类特长怎么写,高中生个人特长自我评价范文(通用5篇)
  4. 搭建eureka-server工程所出现的一系列问题
  5. matlab engine是什么,MATLAB Distributed Computing Engine
  6. 全国统考英语计算机多少分及格,网教统考大学英语B考试合格分数线是多少
  7. 三小时学会css(菜鸟教程精华版)【下】
  8. 迈道科技数字化工地智慧防疫系统助力工地疫情防控实现人员、施工安全闭环管理
  9. 有趣网站盲盒项目设计
  10. 13. Fabric2.2 区块链农产品溯源系统 - 智能合约调试