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 #includeview code10 #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 }
因為網路流的模版問題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,然...