生活随笔
收集整理的這篇文章主要介紹了
【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【BZOJ4873】[六省聯(lián)考2017]壽司餐廳(網(wǎng)絡(luò)流)
題面
BZOJ
洛谷
題解
很有意思的題目
首先看到答案的計算方法,就很明顯的感覺到是一個最大權(quán)閉合子圖。
然后只需要考慮怎么構(gòu)圖就行了。
首先把那個奇奇怪怪的什么\(mx^2+cx\),首先\(cx\)可以拆到每個地方計算,然后\(mx^2\)顯然就是只要有這種被買到就要產(chǎn)生貢獻,那么直接給每種壽司新建一個貢獻然后連\(mx^2\)的邊就行了。
然后考慮選擇了區(qū)間的貢獻,如果選擇了區(qū)間\([l,r]\),就讓\([l,r]\)向\([l+1,r],[l,r-1]\)連邊,這樣子就強制選完這段了。
然后就是裸的最大權(quán)閉合子圖了。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
#define ll long long
#define MAXN 50000
const int inf=1e9;
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
struct Line{int v,next,w;}e[1000000];
int h[MAXN],cnt=2;
inline void Add(int u,int v,int w)
{e[cnt]=(Line){v,h[u],w};h[u]=cnt++;e[cnt]=(Line){u,h[v],0};h[v]=cnt++;
}
int S,T,cur[MAXN],level[MAXN];
bool bfs()
{for(int i=S;i<=T;++i)level[i]=0;level[S]=1;queue<int> Q;Q.push(S);while(!Q.empty()){int u=Q.front();Q.pop();for(int i=h[u];i;i=e[i].next)if(e[i].w&&!level[e[i].v])level[e[i].v]=level[u]+1,Q.push(e[i].v);}return level[T];
}
int dfs(int u,int flow)
{if(u==T||!flow)return flow;int ret=0;for(int &i=cur[u];i;i=e[i].next){int v=e[i].v,d;if(e[i].w&&level[v]==level[u]+1){d=dfs(v,min(flow,e[i].w));ret+=d;flow-=d;e[i].w-=d;e[i^1].w+=d;if(!flow)break;}}if(!ret)level[u]=0;return ret;
}
int Dinic()
{int ret=0;while(bfs()){for(int i=S;i<=T;++i)cur[i]=h[i];ret+=dfs(S,inf);}return ret;
}
int n,m,ans,a[105],lst[1005];
int ID(int l,int r){return 1000+(l-1)*n+r;}
int main()
{n=read();m=read();S=0;T=1000+n*n+1;for(int i=1;i<=n;++i){a[i]=read();if(!lst[a[i]])lst[a[i]]=i,Add(a[i],T,m*a[i]*a[i]);Add(ID(i,i),a[i],inf);Add(ID(i,i),T,a[i]);}for(int i=1;i<=n;++i)for(int j=i;j<=n;++j){int x=read();if(x>0)ans+=x;if(x>0)Add(S,ID(i,j),x);else Add(ID(i,j),T,-x);if(i!=j)Add(ID(i,j),ID(i+1,j),inf),Add(ID(i,j),ID(i,j-1),inf);}printf("%d\n",ans-Dinic());return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/cjyyb/p/10611551.html
總結(jié)
以上是生活随笔為你收集整理的【BZOJ4873】[六省联考2017]寿司餐厅(网络流)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。