今天学了最大权闭合子图。。然后找了这道题,发现完全不会。。。。。

看了题解发现这种有诸如选了一个就一定要选另外的一些的限制又要求最优值的题有的可以转化成最大权闭合子图,

这个题我们首先想到不会选相交的区间,

因为那样代价多算了一遍又不会增加价值。然后就是选一些区间,就有了一个经典的限制:

如果选了区间[i,j]就一定要选[i+1,j]和[i,j-1];

关于代价的处理我们可以对每一个[i,i]连到一个权值为-m*a[i]*a[i]的点,然后把每个[i,i]减去a[i],这里关键是把题意理解好就行了;

//图论模型,难在建图;
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=,maxa=,inf=1e9;
int D[maxn*maxn+maxa],t=,n,m,S,T,sum,last[maxn*maxn+maxa],a[maxn],d[maxn][maxn],num[maxn][maxn];
struct edg{
int nxt,to,f;
}e[maxn*maxn*+maxa*];
void add(int x,int y,int z){
++t;e[t].nxt=last[x];last[x]=t;e[t].to=y;e[t].f=z;
++t;e[t].nxt=last[y];last[y]=t;e[t].to=x;e[t].f=;
}
int q[maxn*maxn+maxa],head,tail;
int bfs(){
head=tail=;memset(D,-,sizeof(D));
q[++tail]=S;D[S]=;
while(head<tail){
int u=q[++head];
for(int i=last[u];i;i=e[i].nxt){
int v=e[i].to;
if(e[i].f&&D[v]==-){
D[v]=D[u]+;q[++tail]=v;
}
}
}
return D[T]!=-;
}
int dfs(int x,int h){
if(x==T){return h;}
int tmp=,cp;
for(int i=last[x];i;i=e[i].nxt){
int v=e[i].to;
if(e[i].f&&D[v]==D[x]+){
cp=dfs(v,min(h-tmp,e[i].f));
e[i].f-=cp;e[i^].f+=cp;tmp+=cp;
}
}
if(!tmp)D[x]=-;
return tmp;
}
int dinic(){
int pp,res=;
while(bfs()){
while(pp=dfs(S,inf))res+=pp;
}
return res;
}
int main(){
cin>>n>>m;
for(int i=;i<=n;++i)scanf("%d",&a[i]);
S=;T=S+maxa+n*n+;
for(int i=;i<=maxa;++i)add(S+i,T,m*i*i);
int cnt=;
for(int i=;i<=n;++i)
for(int j=i;j<=n;++j){
scanf("%d",&d[i][j]);
++cnt,num[i][j]=S+maxa+cnt;
}
for(int i=;i<=n;++i)
for(int j=i;j<=n;++j){
if(i==j){
d[i][j]-=a[i];
add(num[i][j],S+a[i],inf);
}
else{
add(num[i][j],num[i+][j],inf);
add(num[i][j],num[i][j-],inf);
}
if(d[i][j]>){
sum+=d[i][j];
add(S,num[i][j],d[i][j]);
}
else{
add(num[i][j],T,-d[i][j]);
}
}
printf("%d",sum-dinic());
//system("pause");
return ;
}

bzoj4873(最大权闭合子图)的更多相关文章

  1. BZOJ4873 [Shoi2017]寿司餐厅 【最大权闭合子图】

    题目链接 BZOJ4873 题解 题意很鬼畜,就可以考虑网络流[雾] 然后就会发现这是一个裸的最大权闭合子图 就是注意要离散化一下代号 #include<algorithm> #inclu ...

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

    4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 369  Solved: 256[Submit][Status ...

  3. BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图

    题目描述 Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无 ...

  4. [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)

    4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 490  Solved: 350[Submit][Status ...

  5. bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)

    4873: [Shoi2017]寿司餐厅 大难题啊啊!!! 题目:传送门 题解:一眼题是网络流,但还是不会OTZ,菜啊... %题解... 最大权闭合子图!!! 好的...开始花式建边: 1.对于每个 ...

  6. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  7. HDU 3879 Base Station(最大权闭合子图)

    经典例题,好像说可以转化成maxflow(n,n+m),暂时只可以勉强理解maxflow(n+m,n+m)的做法. 题意:输入n个点,m条边的无向图.点权为负,边权为正,点权为代价,边权为获益,输出最 ...

  8. [BZOJ 1497][NOI 2006]最大获利(最大权闭合子图)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1497 分析: 这是在有向图中的问题,且边依赖于点,有向图中存在点.边之间的依赖关系可以 ...

  9. HDU4971 A simple brute force problem.(强连通分量缩点 + 最大权闭合子图)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4971 Description There's a company with several ...

随机推荐

  1. BCHABC/BCHSV的矛盾所在

    BCHABC: 将BCH以后发展智能合约: 消息方面: 吴忌寒:BCH分叉不可避免 未来可能继续分叉 近日,吴忌寒在北大光华管理学院的区块链培训课程上发表演讲表示,在这种言论自由地环境下,我认为分裂就 ...

  2. Mybatis 加载 Mapper配置的四种方式

    具体信息 https://blog.csdn.net/tanga842428/article/details/79285957

  3. 三分钟分布式CAP理论

    分布式系统架构理论,定义了三种指标,理论说我们最多只能满足两个. ## 分布式系统 首先我们这个理论所说的分布式系统,是指系统内会共享数据,互相有连接有交互,才能完成系统功能的的分布式系统.而这个理论 ...

  4. Codeforces55D Beautiful numbers

    原题链接 虽然依旧是套模板,但是因为我太弱了,不会建状态,所以去看了题解.. 这里就直接引用我看的题解吧,写的不错的. 题解 //我的代码 #include<cstdio> #includ ...

  5. BZOJ2330或洛谷3275 [SCOI2011]糖果

    BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中 ...

  6. MySQL学习笔记-MySQL体系结构总览

    MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...

  7. C++ 的虚析构函数

    当一个基类的指针指向一个派生类的对象,并用该基类的指针去删除或者析构派生类对象时,如果基类的析构函数不是声明为虚函数,那么在析构时基类的析构函数将会被直接调用,派生类的析构函数应为没被调用而导致内存泄 ...

  8. virtualbox 采用 NAT 还是 BRIDGE

    正如标题所言,其实这两个都可以让虚拟机上网,但是还是有些差别的. 选择NAT的话, 虚拟机之间无法PING通 虚拟机可以PING通主机 主机无法PING通虚拟机 这是因为虚拟机不能在网络里拥有自己的I ...

  9. About how fast is fast enough for a web application?

    About how fast is fast enough for a web application? Here’s a quick overview of key performance metr ...

  10. jquery纯数字验证

    $(document).ready(function(){  //纯数字验证,只让输入数字,比如-号等都不然输入.  $('#user-defined').unbind();  $('#user-de ...