BZOJ:4873: [Shoi2017]寿司餐厅

4873: [Shoi2017]寿司餐厅

首先很开心在膜你赛的时候做了出来。

看到数据范围,看到不能dp,看到贡献去重后计算,咦,流?

那就容易了,转最大权闭合子图,每个区间建一个点,取了就一定要取他的子区间(依赖关系),代价上也很容易用依赖关系搞。

提交完A了就没理,后来同学说我#1了???

#include<cstdio>
#include<algorithm>
#define MN 40001
using namespace std;

int read_p,read_ca,read_f;
inline int read(){
    read_p=0;read_ca=getchar();read_f=1;
    while(read_ca<‘0‘||read_ca>‘9‘) read_f=read_ca==‘-‘?-1:read_f,read_ca=getchar();
    while(read_ca>=‘0‘&&read_ca<=‘9‘) read_p=read_p*10+read_ca-48,read_ca=getchar();
    return read_p*read_f;
}
const int INF=1e9;
struct na{int y,z,ne;}b[MN*10];
int n,m,map[101][101],nu[101][101],a[101],num=1,no=0,S,T,mmh=0,g[MN],c[MN],d[MN],l[MN];
inline void in(int x,int y,int z){b[++num].y=y;b[num].z=z;b[num].ne=l[x];l[x]=num;}
inline void add(int x,int y,int z){in(x,y,z);in(y,x,0);}
inline int min(int a,int b){return a<b?a:b;}
int sap(int x,int f){
    if (x==T) return f;
    int h=0,q;
    for (int i=d[x];i;i=b[i].ne)
    if (b[i].z&&g[b[i].y]+1==g[x]){
        q=sap(b[i].y,min(b[i].z,f-h));
        h+=q;b[i].z-=q;b[i^1].z+=q;
        if (h==f||g[S]==no) return h;
    }
    if (!(--c[g[x]])) g[S]=no;d[x]=l[x];c[++g[x]]++;
    return h;
}
int main(){
    register int i,j;
    n=read();m=read();
    S=++no;T=++no;

    for (i=1;i<=n;i++)
    for (j=i;j<=n;j++) nu[i][j]=++no;

    for (i=1;i<=n;i++)
    for (j=i+1;j<=n;j++)
    add(nu[i][j],nu[i][j-1],INF),add(nu[i][j],nu[i+1][j],INF);

    for (i=1;i<=n;i++){
        a[i]=read();map[i][i]-=a[i];
        add(nu[i][i],no+a[i],INF);
    }
    for (i=1;i<=n;i++)
    for (j=i;j<=n;j++) if ((map[i][j]+=read())>0) add(S,nu[i][j],map[i][j]),mmh+=map[i][j];else add(nu[i][j],T,-map[i][j]);
    if (m) for (i=1;i<=1000;i++) add(no+i,T,i*i);no+=1000;

    for (;g[S]<no;mmh-=sap(S,INF));
    printf("%d\n",mmh);
}

时间: 2024-10-11 23:04:42

BZOJ:4873: [Shoi2017]寿司餐厅的相关文章

BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当年给别人写的情书一样长-- 最大权闭合子图 最大权闭合子图问题:一个有向图中,每个点带有一个权值(有正有负),有向边\(u \to v\)表示选\(u\)必须选\(v\),选出一些点使权值和最大,问权值和最大是多少. 最大权闭合子图的解法:网络流建图,对于每个点\(u\),设权值为\(w_u\),如

【最大权闭合子图】bzoj4873: [Shoi2017]寿司餐厅

为什么跑得这么慢 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无限的,Kiana也可以无限次 取寿司来吃,但每种寿司每次只能取一份,且每次取走的寿司必须是按餐厅提供寿司的顺序连续的一段,即Kiana 可以一次取走第1,2种寿司各一份,也可以一次取走第2,3种寿司各一份,但不可以一次取走第1,3种寿司.由于餐 厅提供的寿司种类繁多,

BZOJ_4873_[Shoi2017]寿司餐厅_最大权闭合子图

题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4873 分析:我们发现分数正负都有,并且之间有依赖关系,很容易想到最大权闭合子图. 建图: 1.S向正点连边,负点向T连边. 2.选了[i~j]显然要选[i+1~j]和[i~j-1],分别连边. 3.对于i==j的点,向对应的寿司连边. 4.总花费m*x*x+c*x拆成两部分.对于每个代号x,向T连容量为m*x*x的边,c*x这部分我们考虑算f[i][i]时把f[i][i]的值减掉x,当然也可

bzoj4873 [Shoi2017]寿司餐厅

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4873 [题解] 没看出来是最大权闭合子图模型--要多学习学习qwq 首先区间$[i,j]$依赖于区间$[i+1,j]$和$[i,j-1]$.每个区间$[i,j](i < j)$的权值就是$d_{i,j}$. 特别地,区间$[i, i]$的权值为$d_{i,j} - a_i$(由于花费原因). 区间$[i, i]$还依赖于$a_i$这个点,$a_i$这个点的权值为$-m * a_i * a_

bzoj4873: [Shoi2017]寿司餐厅(最小割)

传送门 大佬们是怎么一眼看出这是一个最大权闭合子图的……大佬好强->这里 1.把所有区间$(i,j)$看成一个点,如果权值大于0,则从$S$向他连边,容量为权值,否则从它向$T$连边,容量为权值的相反数 2.对于区间$(i,j)$,向所有的寿司$i$到$j$连边,表示选这个区间这些寿司必须选 3.对每一个寿司类型$w[i]$,为他们各自开一个点,向$T$连边,容量为$m*w[i]*w[i]$ 4.对每一个寿司向他们所属的类型$w[i]$连边,容量为$inf$,向$T$连边,容量为$w[i]$ 5

bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅

http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美味度 的边 2.负美味度区间 向 汇点 连 流量为 美味度的绝对值 的边 3.区间[i,j] 向 区间[i+1,j].区间[i,j-1] 连 流量为 inf 的边 4.区间[i,i] 向 寿司i 连 流量为 inf 的边 5.寿司i 向 汇点 连 流量为 寿司代号 的边 6.寿司i 向 它的代号 连

BZOJ 4873 寿司餐厅(最大权闭合图 网络流)

寿司餐厅 时间限制: 1 Sec  内存限制: 512 MB提交: 6  解决: 3[提交][状态][讨论版] 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个代号 ai和美味度 di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无限的,Kiana 也可以无限次取寿司来吃,但每种寿司每次只能取一份,且每次取走的寿司必须是按餐厅提供寿司的顺序连续的一段,即 Kiana 可以一次取走第 1,2种寿司各一份,也可以一次

Bzoj4873 [SXOI2017]寿司餐厅

Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 64  Solved: 45 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无限的,Kiana也可以无限次 取寿司来吃,但每种寿司每次只能取一份,且每次取走的寿司必须是按餐厅提供寿司的顺序连续的一段,即Kiana 可以一次取走第1,2种寿

bzoj 4871: [Shoi2017]摧毁“树状图”

4871: [Shoi2017]摧毁“树状图” Time Limit: 25 Sec  Memory Limit: 512 MBSubmit: 53  Solved: 9[Submit][Status][Discuss] Description 自从上次神刀手帮助蚯蚓国增添了上千万人口(蚯口?),蚯蚓国发展得越来越繁荣了!最近,他们在地下发现了 一些神奇的纸张,经过仔细研究,居然是D国X市的超级计算机设计图纸!这台计算机叫做‘树状图’,由n个计算 节点与n1条可以双向通信的网线连接而成,所有计算