BZOJ3438 小M的作物

2022-05-12 01:48:08 字數 2503 閱讀 1166

time limit: 10 sec  memory limit: 256 mb

submit: 247  solved: 124

[submit][status]

背景小m還是個特麼喜歡玩mc的孩紙。。。

描述小m在mc裡開闢了兩塊巨大的耕地a和b(你可以認為容量是無窮),現在,小p有n中作物的種子,每種作物的種子有1個(就是可以種一棵作物)(用1...n編號),現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作物共同種在一塊耕地中可以獲得額外的收益,小m找到了規則中共有m種作物組合,第i個組合中的作物共同種在a中可以獲得c1i的額外收益,共同總在b中可以獲得c2i的額外收益,所以,小m很快的算出了種植的最大收益,但是他想要考考你,你能回答他這個問題麼?

第一行包括乙個整數n

第二行包括n個整數,表示ai

第三行包括n個整數,表示bi

第四行包括乙個整數m

接下來m行,對於接下來的第i行:第乙個整數ki,表示第i個作物組合中共有ki種作物,接下來兩個整數c1i,c2i,接下來ki個整數,表示該組合中的作物編號。輸出格式

只有一行,包括乙個整數,表示最大收益

3421

2321

23212

11樣例解釋

a耕地種1,2,b耕地種3,收益4+2+3+2=11。

資料範圍與約定

對於100%的資料,1<=k< n<= 1000,0

kpmcup#0 by greens

題解:最小割。。。我來搬運題解:

云神:此題將所有點劃分成兩個集合,要求獲得的點權及附加權最大,可以很容易聯想到最小割模型:

我們先把所有的收益加起來,然後建圖(令劃分到a的點為集合s,劃分到b的點為集合t):

對於乙個點i,從源點到該點連一條容量為ai的邊,再從該點連一條容量為bi的邊到匯點,對於一種附加權方案j,新增兩個輔助點vj,uj,從源點連一條容量為c1j的邊到vj,然後從vj連邊到該方案中的所有點,容量為正無窮,從uj連一條容量為c2j的邊到匯點,然後對於方案中的所有點連邊到uj,容量為正無窮。

然後跑一次最大流演算法求出最小割,用總的收益減去最小割即為答案。

證明:假如乙個點i劃分到t,那麼該點劃分在s的收益以及於該點有關的附加權方案劃分到s的收益將都被割去,對應的就是圖中i與源點匯點的連邊以及對於方案輔助點的連邊。

**:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include

10 #include11 #include

12#define inf 1000000000

13#define maxn 100000

14#define maxm 5000000

15#define eps 1e-10

16#define ll long long

17#define pa pair18

#define for0(i,n) for(int i=0;i<=(n);i++)

19#define for1(i,n) for(int i=1;i<=(n);i++)

20#define for2(i,x,y) for(int i=(x);i<=(y);i++)

21#define for3(i,x,y) for(int i=(x);i>=(y);i--)

22#define mod 1000000007

23using

namespace

std;

24 inline int

read()

2528

while(ch>='

0'&&ch<='9')

29return x*f;30}

31int n,m,s,t,cnt,sum,maxflow,tot=1

,head[maxn],cur[maxn],h[maxn],q[maxn];

32struct edgee[maxm];

33void ins(int x,int y,int z)

34void insert(int x,int y,int z)

35bool

bfs()

3647}48

return h[t]!=-1;49

}50int dfs(int x,int

f)51

62if(!used) h[x]=-1;63

return

used;64}

65void

dinic()

6672}73

intmain()

7479 for1(i,n)

80 m=read();

81for1(i,m)

8290}91

dinic();

92 cout

93return0;

94 }

view code

因為網路流的模版問題wa了好久。。。

BZOJ3438 小M的作物

bzoj3438 小m的作物 小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子有1個 就是可以種一棵作物 用1.n編號 現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作...

bzoj3438 小M的作物

題目鏈結 先考慮沒有額外收益的時候怎麼做。從 s 向第 i 點連一條容量為 a i 邊,表示種在 a 中的收益。從第 i 個點向 t 連一條容量為 b i 的邊,表示種在 b 中的收益。然後求出來最小割,用總收益減去即可。完成之後如下圖 然後考慮如何處理額外收益 對於每乙個額外的收益,我們先新建乙個...

bzoj3438 小M的作物

這題是一道最大權閉合圖的經典難題 by rose max upd 不誤人子弟了,這就是乙個裸的最小割啊。然後構圖的方式就是把作物值分成ab集合,乙個在st一邊,乙個在ed一邊,st連作物流量為a i 作物流ed流量為b i 對於每乙個組合,新建兩個點,乙個被st流流量為c1,乙個流ed流量為c2,然...