BZOJ4873 LuoguP3749 寿司餐厅
题面太长,请诸位自行品尝—>寿司餐厅
分析:
首先题目中给了限制条件,假如选了D(i,j)(i<j),那么也就选了D(i+1,j)和D(i,j-1)两个点。
于是我们一下就明白了,哦,最大权闭合子图~
所以我们让每一个D代表一个点,然后对于每个D(i,j)代表的点,分别向D(i+1,j)和D(i,j-1)所代表的点连边(容量为inf),然后按照最大权闭合子图的建图方式建图~
完了?
并没有。我们接着看题面,其实代价还有一个,是mx^2+cx,这个我们怎么加上?
直接看啥也看不出来,所以我们拆开来看。首先,mx^2是由代号和常数m决定的,所以我们可以把它独立开来,对每个编号建立一个点,因为它是代价,所以点权是负的,所以我们从它向汇点T连一条边权为mx^2的边,然后把每个代号为x的寿司向它代号那个点连边。
再考虑cx怎么计算,这个好办,多选一种编号为x的寿司就会产生x的代价,所以我们把每种寿司向T点连边,容量为x即可产生费用。
代码:
#include<bits/stdc++.h>
#define ms(a,x) memset(a,x,sizeof(a))
#define p(x,y) ((x-1)*n+y+1000)
using namespace std;int S,T,tot;
const int N=,inf=0x3f3f3f3f;
struct node{int y,z,nxt;}e[N*];int a[N];
int c=,h[N],d[N],m,k,n,ans,q[N],sn[N],g,sm;
void add(int x,int y,int z){
e[++c]=(node){y,z,h[x]};h[x]=c;
e[++c]=(node){x,,h[y]};h[y]=c;
} bool bfs(){int f=,t=;ms(d,-);
d[S]=;q[++t]=S;
while(f<=t){
int x=q[f++];
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==-&&e[i].z)
d[y]=d[x]+,q[++t]=y;
} return (d[T]!=-);
} int dfs(int x,int f){
if(x==T) return f;int w,tmp=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==d[x]+&&e[i].z){
w=dfs(y,min(e[i].z,f-tmp));
if(!w) d[y]=-;e[i].z-=w;
e[i^].z+=w;tmp+=w;if(tmp==f) return f;
} return tmp;
} void solve(){
while(bfs()) tot+=dfs(S,inf);
} int main(){
scanf("%d%d",&n,&m);S=;T=n*n+;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
if(m&&!sn[a[i]])
sn[a[i]]=,add(a[i],T,a[i]*a[i]);
add(p(i,i),a[i],inf);
add(p(i,i),T,a[i]);
} for(int i=;i<=n;i++)
for(int j=i;j<=n;j++){
scanf("%d",&g);sm+=(g>?g:);
if(g>) add(S,p(i,j),g);
else add(p(i,j),T,-g);
if(i!=j) add(p(i,j),p(i+,j),inf);
if(i!=j) add(p(i,j),p(i,j-),inf);
} solve();printf("%d\n",sm-tot);return ;
}
最大权闭合子图
BZOJ4873 LuoguP3749 寿司餐厅的更多相关文章
- 【最大权闭合子图】bzoj4873 [Shoi2017]寿司餐厅
4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 369 Solved: 256[Submit][Status ...
- BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图
题目描述 Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无 ...
- Bzoj4873 [SXOI2017]寿司餐厅
Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 64 Solved: 45 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每 ...
- bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)
4873: [Shoi2017]寿司餐厅 大难题啊啊!!! 题目:传送门 题解:一眼题是网络流,但还是不会OTZ,菜啊... %题解... 最大权闭合子图!!! 好的...开始花式建边: 1.对于每个 ...
- bzoj4873 [Shoi2017]寿司餐厅
Input 第一行包含两个正整数n,m,分别表示这家餐厅提供的寿司总数和计算寿司价格中使用的常数. 第二行包含n个正整数,其中第k个数ak表示第k份寿司的代号. 接下来n行,第i行包含n-i+1个整数 ...
- BZOJ4873 Shoi2017寿司餐厅(最小割)
选择了某个区间就必须选择其所有子区间,容易想到这是一个最大权闭合子图的模型.考虑将区间按长度分层,相邻层按包含关系连边,区间[i,j]的权值即di,j,其中最后一层表示长度为1的区间的同时也表示寿司本 ...
- BZOJ4873 [Shoi2017]寿司餐厅 【最大权闭合子图】
题目链接 BZOJ4873 题解 题意很鬼畜,就可以考虑网络流[雾] 然后就会发现这是一个裸的最大权闭合子图 就是注意要离散化一下代号 #include<algorithm> #inclu ...
- bzoj4873: [Shoi2017]寿司餐厅(最小割)
传送门 大佬们是怎么一眼看出这是一个最大权闭合子图的……大佬好强->这里 1.把所有区间$(i,j)$看成一个点,如果权值大于0,则从$S$向他连边,容量为权值,否则从它向$T$连边,容量为权值 ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
随机推荐
- MFC优秀博客记录 鸡啄米
最近在学习和利用C++ MFC做一些小的应用,发现鸡啄米先生的教程很不错适合新手,在这就把自己实现的一些小demo分享一下: C++编程入门系列之目录和总结 第一部分:C++编程概述 第二部分:C++ ...
- HDU2604:Queuing(矩阵快速幂+递推)
传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...
- 【练习总结】题目:筛法遍历素数(Java)
初学Java,学到流程控制的循环,有个练习题是暴力遍历素数. 因为看过av32186751,知道有个筛法,就想试试. 又受到线性筛法(一)--素数筛法(一) - nerd呱呱 - 博客园中,的这段启发 ...
- 解决window.opener.obj instanceof Object会输出false的问题
在a.html页面中: window.obj = {name: "jinbang"} 在a.html页面中打开新窗口b.html页面: console.log(window.ope ...
- django views视图函数
Django views.py视图文件 一. 创建views.py文件,在工程文件夹根目录创建views.py视图文件,其实任意文件名都可以,使用views是为了遵循传统. 注:所有的views函数都 ...
- Hdu 5371 Hotaru's problem (manacher+枚举)
题目链接: Hdu 5371 Hotaru's problem 题目描述: 给出一个字符串N,要求找出一条N的最长连续子串.这个子串要满足:1:可以平均分成三段,2:第一段和第三段相等,3:第一段和第 ...
- ACM经历与感悟合集
ACM经历与感悟合集 ACM起步要点总结(转哈工大) ACM 荣耀之路-学习方法 ACM感悟 一位ACMer过来人的心得 ACM经历总结 大学ACM的总结 ACM大牛的退役贴 各大牛退役总结帖 女生应 ...
- jquery + ajax 实现多条件查询
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JquerySort.aspx. ...
- bootstrap datatable项目封装
(function($) { $.fn.formJSON = function() { var serializeObj = {}; var array = t ...
- AJPFX详解jsp的九大内置对象和四大作用域
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域) 客户端的请 ...