China Final J - Mr.Panda and TubeMaster

和一般的管道不同
不能类似“无限之环”或者“弯弯国”的建图,因为这两个题都是某些位置必须有,或者必须没有
但是本题可以有的位置随意,不能限制某个位置要么流2,要么流0,(实际上可能流了1过去)
所以建图方式不能一样了。
唯一的好处是:只有四种管道。
横的、竖的,所以考虑拆点
法一:
黑白染色
每个点拆成两个点,横、竖
黑色:横->竖,竖->上下的白点的竖,左右白点的横->横
白色:竖->横,横->到左右黑点的横,上下的黑点->竖
必须的就上下界[1,1]否则[0,1]
也即形如:

无源汇上下界最大费用可行流。
求出可行流,在第二步增广的时候,费用<0就break掉
直接跑最大费用最大流得到可行流即可。
PS:可能有正环,需要消圈。[学习笔记]费用流
法二:
考虑连成的若干个环
黑白染色
黑色:横向的是出边,纵向的是入边
白色:纵向的是出边,横向的是入边
然后类似“星际竞速”就可以了
如果一个边不需要选择,就入点直接向出点连边。
最大费用最大流。
之所以可以用“星际竞速”建图来做,因为每个边可以有固定的流向。
且一定一个边入,一个边出,最终成环
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
namespace Modulo{
const int mod=;
int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
void inc(int &x,int y){x=ad(x,y);}
int mul(int x,int y){return (ll)x*y%mod;}
void inc2(int &x,int y){x=mul(x,y);}
int qm(int x,int y=mod-){int ret=;while(y){if(y&) ret=mul(x,ret);x=mul(x,x);y>>=;}return ret;}
template<class ...Args>il int ad(const int a,const int b,const Args &...args) {return ad(ad(a,b),args...);}
template<class ...Args>il int mul(const int a,const int b,const Args &...args) {return mul(mul(a,b),args...);}
}
// using namespace Modulo;
namespace Miracle{
const int N=;
const int inf=0x3f3f3f3f;
const int P=*N*N;
int n,m;
struct node{
int nxt,to;
int w,c;
}e[*(N*N**)];
int hd[P],cnt=;
int num(int i,int j,int t){
return t*n*m+(i-)*m+j;
}
void add(int x,int y,int w,int c){
e[++cnt].nxt=hd[x];
e[cnt].to=y;e[cnt].w=w;e[cnt].c=c;
hd[x]=cnt; e[++cnt].nxt=hd[y];
e[cnt].to=x;e[cnt].w=;e[cnt].c=-c;
hd[y]=cnt;
}
int dis[P],vis[P];
int incf[P],pre[P];
bool lim[N][N];
int s,t;
queue<int>q;
int ans,flow;
bool spfa(){
memset(dis,0xcf,sizeof dis);
dis[s]=;incf[s]=inf;
pre[t]=;
q.push(s);
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(e[i].w&&dis[y]<dis[x]+e[i].c){
dis[y]=dis[x]+e[i].c;
pre[y]=i;incf[y]=min(incf[x],e[i].w);
if(!vis[y]){
vis[y]=;
q.push(y);
}
}
}
}
if(!pre[t]) return false;
return true;
}
void upda(){
int x=t;
while(x!=s){
e[pre[x]].w-=incf[t];
e[pre[x]^].w+=incf[t];
x=e[pre[x]^].to;
}
ans+=dis[t]*incf[t];
flow+=incf[t];
}
void clear(){
memset(hd,,sizeof hd);
cnt=;
ans=;flow=;
s=;t=;
memset(lim,,sizeof lim);
}
int main(){
int T;
rd(T);
for(reg o=;o<=T;++o){
rd(n);rd(m);
clear();
s=;t=num(n,m,)+;
int v;
for(reg i=;i<=n;++i){
for(reg j=;j<m;++j){
rd(v);
if((i+j)&){//white
add(num(i,j+,),num(i,j,),,v);
}else{//black
add(num(i,j,),num(i,j+,),,v);
}
}
}
for(reg i=;i<n;++i){
for(reg j=;j<=m;++j){
rd(v);
if((i+j)&){//white
add(num(i,j,),num(i+,j,),,v);
}else{
add(num(i+,j,),num(i,j,),,v);
}
}
}
int k;
rd(k);
int x,y;
for(reg i=;i<=k;++i){
rd(x);rd(y);
lim[x][y]=;
}
for(reg i=;i<=n;++i){
for(reg j=;j<=m;++j){
add(s,num(i,j,),,);
add(num(i,j,),t,,);
if(!lim[i][j]) add(num(i,j,),num(i,j,),,);
}
}
while(spfa()) upda();
printf("Case #%d: ",o);
if(flow==n*m){
printf("%d\n",ans);
}else{
printf("Impossible\n");
}
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/
其实两个方法有点类似
都是相当于黑白染色,然后给边定向
法一,通过循环流直接就是环
法二,“星际竞速”图,可以拼成环
China Final J - Mr.Panda and TubeMaster的更多相关文章
- ICPC 2016 China Final J. Mr.Panda and TubeMaster【最大费用最大流】
有一种限制下界强制选的,但是也可以不用 把每个格点拆成两个,一个连s一个连t,对于不是必选的连中间连流量1费用0边表示不选,然后黑白染色,黑点连横着白点连竖着,边权就是这条水管的权值,然后跑最大费用最 ...
- 【费用流】 ICPC 2016 China Final J. Mr.Panda and TubeMaster
表示“必须选”的模型 题目大意 题目分析 一个格子有四种方式看上去很难处理.将横竖两个方向分开考虑,会发现:因为收益只与相邻格子是否连通有关,所以可以将一个格子拆成表示横竖两个方向的,互相独立的点. ...
- J - Mr.Panda and TubeMaster
题解 我们可以把每个格子拆成两个点,一个表示横向的,一个表示纵向的,相邻的格子横向和纵向连边. 如果直接按照题意做的话,我们应当在横向和纵向的点之间连边,有限制的边设下界为1,然后跑可行流. 或者考虑 ...
- Gym101194J Mr.Panda and TubeMaster 二分图、费用流
传送门 看到这张图,是一个网格图,而且有回路限制,不难想到黑白染色. 一般来说我们对一张图黑白染色之后都是黑色点向白色点连边,但是这道题往这边想似乎就想不出建图方法了,因为"一个格子强制流满 ...
- 2016 ACM-ICPC China Finals #F Mr. Panda and Fantastic Beasts
题目链接$\newcommand{\LCP}{\mathrm{LCP}}\newcommand{\suf}{\mathrm{suf}}$ 题意 给定 $n$ 个字符串 $s_1, s_2, \dots ...
- 2016EC Final F.Mr. Panda and Fantastic Beasts
题目大意 \(T(1\leq T\leq42)\)组数据,给定\(n(2\leq n\leq 50000)\)个字符串\(S_{i}(n\leq\sum_{i=1}^{n}S_{i}\leq 2500 ...
- 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定理
2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定 ...
- hdu6007 Mr. Panda and Crystal 最短路+完全背包
/** 题目:hdu6007 Mr. Panda and Crystal 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6007 题意:魔法师有m能量,有n ...
- ACM ICPC China final G Pandaria
目录 ACM ICPC China final G Pandaria ACM ICPC China final G Pandaria 题意:给一张\(n\)个点\(m\)条边的无向图,\(c[i]\) ...
随机推荐
- 云-腾讯云-笔记:pom.xml 配置
ylbtech-云-腾讯云-笔记:pom.xml 配置 1. pom.xml返回顶部 1.1 com.qcloud / 腾讯云 <!-- https://mvnrepository.com/ar ...
- 【题解】P1440 均分纸牌
均分纸牌 题目描述: 有\(N\)堆纸牌,编号分别为\(1,2,-,N\).每堆上有若干张,但纸牌总数必为\(N\)的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为\(1\)堆上取 ...
- c++中变量、变量名、变量地址、指针、引用等含义
首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5...... 房间里面一定要住人,新人住进去了,原来的人就走了:不管你住不住,里面都有人. 编号就是地址.里面的人就是内容,为了我们 ...
- [kuangbin带你飞]专题一 简单搜索 - A - 棋盘问题
#include<iostream> #include<cstdio> #include<string> #include<vector> #inclu ...
- 小tips: zoom和transform:scale的区别
小tips: zoom和transform:scale的区别 转自 张鑫旭 前端大神 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://w ...
- spring的mvc对于页面日期格式进行传值到后台
对于spring的mvc 日期格式从页面传入后台是个问题.string类型和整形都能友好传入.但是对于日期类型date却不能传入.回报403参数不对的错误. 看例子: @RequestMapping( ...
- UMP系统功能 资源管理
- Linux安装Java与Eclipse
Linux安装Java和Eclipse 一.准备工作 1.下载jdk https://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...
- 对this的理解与总结
this既不指向函数自身,也不指向函数的词法作用域!它指向谁完全取决于它在哪里被调用,被谁调用! 绑定规则 总体来说,this的绑定规则有: 默认绑定(严格模式/非严格模式) 隐式绑定 显式绑定 ne ...
- Python+Selenium基础入门及实践
Python+Selenium基础入门及实践 32018.08.29 11:21:52字数 3220阅读 23422 一.Selenium+Python环境搭建及配置 1.1 selenium 介绍 ...