小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子
有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可以获得ai的收益,在B中种植
可以获得bi的收益,而且,现在还有这么一种神奇的现象,就是某些作物共同种在一块耕地中可以获得额外的收益
,小M找到了规则中共有m种作物组合,第i个组合中的作物共同种在A中可以获得c1i的额外收益,共同总在B中可以
获得c2i的额外收益,所以,小M很快的算出了种植的最大收益,但是他想要考考你,你能回答他这个问题么?
Input
第一行包括一个整数n
第二行包括n个整数,表示ai第三行包括n个整数,表示bi第四行包括一个整数m接下来m行,
对于接下来的第i行:第一个整数ki,表示第i个作物组合中共有ki种作物,
接下来两个整数c1i,c2i,接下来ki个整数,表示该组合中的作物编号。输出格式
Output
只有一行,包括一个整数,表示最大收益 Sample Input Sample Output 样例解释A耕地种1,,B耕地种3,收益4+++=。
<=k< n<= , < m < = 保证所有数据及结果不超过2*^。

思路:orzpopoqqq。假定全部在A里,然后去找增广流。  如果很好地理解了用最大流求最大闭合权图的话,就不难想通。

最大闭合权图:原点与代价点连接,收益点与汇点连接; 收益和-最大流=最大净收益。 那么现在的基本代价或者收益是ai-bi,。然后破坏集合的代价是c1i,得到集合的收益是c2i。 差不多就酱紫。具体的请去看popoqqq的题解。

和BZOJ3894差不多,就不多说了:http://www.cnblogs.com/hua-dong/p/8655375.html

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
const long long inf=;
int N,M,S,T,cnt=;
long long ans,maxflow,cap[maxn];
int Laxt[maxn],To[maxn],Next[maxn],vd[maxn],dis[maxn];
void add(int u,int v,long long c)
{
Next[++cnt]=Laxt[u];
Laxt[u]=cnt;
To[cnt]=v;
cap[cnt]=c;
}
long long sap(int u,long long flow)
{
if(flow==||u==T) return flow;
long long tmp,delta=;
for(int i=Laxt[u];i;i=Next[i]){
if(dis[u]==dis[To[i]]+&&cap[i]>){
tmp=sap(To[i],min(cap[i],flow-delta));
delta+=tmp;
cap[i]-=tmp;
cap[i^]+=tmp;
if(delta==flow||dis[S]>T+) return delta;
}
}
vd[dis[u]]--;
if(vd[dis[u]]==) dis[S]=T+;
vd[++dis[u]]++;
return delta;
}
int main()
{
int i,j,x,y,num; scanf("%d",&N);
S=; T=;
for(i=;i<=N;i++){
scanf("%d",&x); ans+=x;
add(S,i,x); add(i,S,);
}
for(i=;i<=N;i++){
scanf("%d",&x); ans+=x;
add(i,T,x); add(T,i,);
}
scanf("%d",&M);
for(i=;i<=M;i++){
scanf("%d",&num);
scanf("%d%d",&x,&y);
ans+=x+y;
add(S,N+i,x); add(N+i,S,);
add(N+M+i,T,y); add(T,N+M+i,);
for(j=;j<=num;j++){
scanf("%d",&x);
add(N+i,x,inf); add(x,N+i,);
add(x,N+M+i,inf); add(N+M+i,x,);
}
}
while(dis[S]<=T) maxflow+=sap(S,inf);
printf("%d\n",ans-maxflow);
return ;
}

最新文章

  1. JS里面Data日期格式转换
  2. C# 使用 NPOI 库读写 Excel 文件(转载)
  3. JsonTest
  4. HTTP 协议详解
  5. Http概述(一)
  6. 非传统题【A002】
  7. jsPlumb插件做一个模仿viso的可拖拉流程图
  8. leetcode面试准备:Contains Duplicate I &amp;&amp; II
  9. IE浏览器设置
  10. 【BZOJ1012】【树状数组求区间最值】最大数maxnumber
  11. Ubuntu 12.04 LTS下logomaker的安装
  12. 朗姆达表达式类似IN查询条件
  13. JS数组操作中的经典算法
  14. 解决div里面img标签后面跟着空白符
  15. Codeforces780C
  16. CentOS修改root密码
  17. pyautogui 文档(四):消息框功能
  18. [moosefs] storage class
  19. Effective MySQL之SQL语句最优化——读书笔记之一
  20. 20155327预备作业3:Linux安装及命令入门

热门文章

  1. 梅森素数应用 nefu 120
  2. LA 3720 高速公路(互质判斜率)
  3. java将配置信息写在数据库(利用反射)
  4. Java Collections Framework 汇总
  5. 【nginx】一台nginx服务器多域名配置
  6. 使用bootstrap时碰到问题$(...).modal is not a function
  7. php给图片添加圆角并且保持透明,可做圆形头像
  8. php-fpm: 某项目网站频繁出现503问题解决( WARNING: [pool www] server reached pm.max_children setting (50), consider raising it)
  9. oracle 11g安装过程中问题:移动bin\oralbac11.dll 到bin\oralbac11.dll.dbl出错
  10. Java循环结构 - for, while 及 do...while