六省聯考 壽司餐廳

2021-08-16 19:31:51 字數 2020 閱讀 4435

太長了,不描述!

看題面看了10min才反應過來這是個最大權值閉合子圖的問題

應用網路流最小割的模型來解決本問題

首先,每個壽司編號即為器材,代價為 w[i]*w[i]*m

那麼我們由每個壽司編號向匯點鏈結一條容量為w[i]*w[i]*m

每個壽司一定需要乙個壽司編號,代價為 -w[i]

那麼我們由壽司向壽司編號連一條inf的邊,由壽司向匯點連一條容量為w[i]的邊

把每個區間附加值看做乙個實驗 然後建邊

注意區間有包含關係!

總結一下:

1.對於所有的(i,j)(i,j)(i,j) 區間收益,將它們各自看做乙個點,若權值mpmpmp 為正,從源點連過來,容量為mpmpmp ,若權值為負,連到匯點去,容量為−mp-mp−mp

2.對於所有的(i,j)(i,j)(i,j) 區間收益,向區間內包括的i到j號壽司連邊,容量為infinfinf ,表示必須選對應的壽司才能選這個區間

3.對於所有的壽司型別w[i]w[i]w[i],為它們各自開乙個點,向匯點t連邊,容量為m∗w[i]∗w[i]m*w[i]*w[i]m∗w[i]∗w[i]

4.對於1~n每乙個壽司,向它們所屬的型別w[i]w[i]w[i] 連邊,容量為infinfinf ;向t連邊,容量為c[i]c[i]c[i]

5.對於所有的(i,j)(i,j)(i,j) 區間,向(i+1,j)(i+1,j)(i+1,j) 和(i,j−1)(i,j-1)(i,j−1) 連邊,容量為inf,表示選了大區間肯定得選被大區間包含的小區間

luogu 3749

bzoj 4873

// luogu-judger-enable-o2

#include

#include

#include

#include

#define il inline

using

namespace

std;

const

int inf=0x7fffffff;

const

int maxm=110000;

int head[maxm],to[maxm*2],cap[maxm*2],net[maxm*2],deep[maxm],cnt=1;

il void add(int x,int y,int c)

queue

dl;

int id1[200][200],id2[200],w[1010],cost[200][200];

int n,m;

bool vis[maxm];

il bool bfs(int s,int t)

return deep[t]==-1?0:1;

}int dfs(int now,int flow,int t)

}if(!used) deep[now]=-1;

return used;

}il int dinic(int s,int t)

inline

void adx(int x,int y,int cax)

int main()

for(int i=1;i<=n;i++)

for(int j=i;j<=n;j++)

scanf("%d",&cost[i][j]),id1[i][j]=++tot;

int s=0,t=tot+n+10;

memset(vis,0,sizeof(vis));

for(int i=1;i<=n;i++)

if(!vis[w[i]]) adx(id2[w[i]],t,w[i]*w[i]*m),vis[w[i]]=1;

for(int i=1;i<=n;i++)

adx(tot+i,id2[w[i]],inf),adx(tot+i,t,w[i]);

for(int i=1;i<=n;i++)

for(int j=i;j<=n;j++)

printf("%d\n",sum-dinic(s,t));

return

0; }

六省聯考 2017 壽司餐廳

戳我 簡要題目 乙個序列,可以若干次取其中一段區間,區間及其子集的價值都會被統計進去且每個區間的價值只能被統計一次。如果你拿 c 種 x 數,你需要花費 m x 2 c x 的代價。求最大價值。這道題看起來並沒有思路,看了看題解後發現這是最大權閉合子圖。what?這是神馬?不會,於是去學了一下。然後...

六省聯考2017 壽司餐廳

感覺有難度的一道網路流 自己的網路流水平還是遠遠不夠 一開始以為是費用流搞了半天,發現無法處理只有第一次有效的情況 於是看題解才知道就是個最大權閉合子圖 由於每種東西都只有第一次有效 那麼我們可以考慮把區間作為點建圖 考慮最大權閉合子圖的模型 選擇區間 i,j 的貢獻就一定要選擇區間 i 1,j i...

P3749 六省聯考2017 壽司餐廳

首先因為每個值只會被算一次且值的個數為 n 2 級別的,因此我們可以對每個 d 開乙個點,之後就可以用最大權閉合子圖做。考慮題目的限制 1.選擇乙個區間 l,r 會將 sum limits sum limits rd 選上 我們顯然不能全部連上,這是 n 4 級別的,我們可以只從 d 向 d 和 d...