bzoj 2132: 圈地计划】的更多相关文章

圈地计划 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划分为N×M块小区域.GDOI要求将这些区域分为商业区和工业区来开发.根据不同的地形环境,每块小区域建造商业区和工业区能取得不同的经济价值.更具体点,对于第i行第j列的区域,建造商业区将得到Aij收益,建造工业区将得到Bij收益.另外不同的区域连在一起可以得到额外的收益,即如果…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2132 题意:n*m的格子染色黑白,对于格子(i,j)染黑色则价值为A[i][j],白色为B[i][j].若一个格子四周不同颜色的有x个,则额外的价值为x*C[i][j].求最大价值. 思路:将格子黑白染色分成两个集合X和Y.S集合为X中的A和Y中的B,T为X中的B和Y中的A.相邻的连边为两个格子的C值之和.总权值减去最小割即是答案. struct node { int v,cap,ne…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2132 [题意] 给定n*m个区域,建工业区价值A,建商业区价值B,如果(i,j)有k个相邻区域与之所建不同则价值为k*C,求最大获益. [思路] 首先将图黑白染色,使(i+j)&1的为白点X,其他为黑点Y,满足白/黑点集之内无相邻关系. 对于白点,连边(S,X,A)(X,T,B) 对于黑点,连边(S,Y,B)(X,Y,A) 两相邻黑白点之间连无向边(CA+CB) 表示A格C与B格C之…
#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf 2139062143 using namespace std; ][],b[][],c[][],tot,cnt=,T,ans,head[M],d[M],q[*M],next[*M],u[*M],v[*M]; ]={,,,-},yy[]={,-,,}; bool bfs() { memset(d,,)); ,…
对于网格图,尤其是这种要求相邻各自不同的,考虑黑白染色 对于这张染色后图来说: 对于每个黑格: 表示初始时选择商业区: s点向它连商业区收益的流量,它向t点连工业区收益的流量: 割断S侧的边说明反悔,则保留T侧边的边权(工业区),割断T侧的边说明维持原样,保留S侧边权(商业区) 对于每个白格: 表示初始时选择工业区: s点向它连工业区收益的流量,它向t点连商业区收益的流量: 割断S侧的边说明反悔,则保留T侧边的边权(商业区),割断T侧的边说明维持原样,保留S侧边权(工业区) 对于相邻格子: 相邻…
类似于happiness的一道题,容易想到最小割的做法. 但是不同的是那一道题是相邻的如果相同则有收益,这题是相邻的不同才有收益. 转化到建图上面时,会发现,两个相邻的点连的边容量会是负数.. 有一种转化的办法,把图进行黑白染色后,把白点的S-T倒转过来,这样就转化成了happiness那道题了... # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream>…
网络流/最小割 Orz Hzwer 这类大概是最小割建模中的经典应用吧…… 黑白染色,然后反转黑色的技巧感觉很巧妙!这个转化太神奇了…… /************************************************************** Problem: 2132 User: Tunix Language: C++ Result: Accepted Time:0 ms Memory:6252 kb ***********************************…
2132: 圈地计划 题目:传送门 简要题意: 给出一个矩阵,一共n*m个点,并给出三个收益矩阵.A矩阵表示这个点建A的可取收益,B矩阵表示这个点建B的可取收益,C矩阵表示如果相邻(有且仅有一条公共边)的点和自己所建的建筑不一样,则可获得C[i][j]的收益,如果相邻的有k个点和自己不一样,则收益为k*C[i][j].求最大收益. 题解: 日常一模最小割%%%ORZ 本蒟蒻其实也看出是最小割什么的,但是怎么割啊... 可能有人会和我有一样的疑惑: 按照正常的割法建图:st到x连A收益,x到ed连…
[BZOJ2132]圈地计划(最小割) 题面 BZOJ 题解 对我而言,不可做!!! 所以我膜烂了ZSY大佬 他的博客写了怎么做... 这,,...太强啦!! 完全想不到黑白染色之后反着连边 然后强行把同侧转化成异侧求最小割... #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm…
BZOJ 5424: 烧桥计划 目前暂居rk1QAQ 首先,设\(f[i][k]\)为前i个点中,选了第i个点,总共选了k个点的答案.那么就有: \[f[i][k]=min_{j<i}\{f[j][k-1]+calc(j,i)\}+k*a[i]\] 其中,\(calc(j,i)=[s[i-1]-s[j]>m]*(s[i-1]-s[j])\). 那么转移的时候,大于m的很显然的可以用前缀和,而小于等于m的可以用单调队列处理.这样转移复杂度就变成了\(O(n^2)\). 而\(1000 \le a…