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

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

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

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

如果选了区间[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. mysql联表更新使用join

    update TableA  as a inner join TableB as b on a.order_id=b.order_id set a.last_time='2018-01-01' whe ...

  2. MBP 使用笔记

    1.svn下载指令(终端) svn checkout https://svn.openslam.org/data/svn/gmapping 参考:http://blog.csdn.net/q19910 ...

  3. devexpress 如何读demo源码 总结

    对于初学这个庞大的控件集合的程序猿来讲应该是有些难度的.今天就devexpress  demo 里边一些东西就本人的所学做一下引导吧. dev 有个帮助文件 DevExpress 中文帮助文档 和每个 ...

  4. 3A - Holding Bin-Laden Captive!

    We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec ...

  5. Maven的conf目录下settings.xml的简单配置

    省略一些其他配置 <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="h ...

  6. linux 使用笔记2

    安装chrome浏览器在Fedora 23 下载pub wget https://dl-ssl.google.com/linux/linux_signing_key.pub 安装pub sudo rp ...

  7. C#泛型的学习

    编码: class Program { static void Main(string[] args) { ; Test<int> test1 = new Test<int>( ...

  8. HTTP 1.0 Status Code Definitions

    part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 10 Status Code Definitions ...

  9. How to convert a PDF file to JPEGs using PHP

    Hey, Today I would like to show you how we can convert PDF to JPEG using imagick extension. Imagick ...

  10. JDK 之 NIO 2 WatchService、WatchKey(监控文件变化)

    JDK 之 NIO 2 WatchService.WatchKey(监控文件变化) JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html ...