Discription

SmallR is a biologist. Her latest research finding is how to change the sex of dogs. In other words, she can change female dogs into male dogs and vice versa.

She is going to demonstrate this technique. Now SmallR has n dogs, the costs of each dog's change may be different. The dogs are numbered from 1 to n. The cost of change for dog i is vi RMB. By the way, this technique needs a kind of medicine which can be valid for only one day. So the experiment should be taken in one day and each dog can be changed at most once.

This experiment has aroused extensive attention from all sectors of society. There are m rich folks which are suspicious of this experiment. They all want to bet with SmallR forcibly. If SmallR succeeds, the i-th rich folk will pay SmallR wi RMB. But it's strange that they have a special method to determine whether SmallR succeeds. For i-th rich folk, in advance, he will appoint certain ki dogs and certain one gender. He will think SmallR succeeds if and only if on some day the ki appointed dogs are all of the appointed gender. Otherwise, he will think SmallR fails.

If SmallR can't satisfy some folk that isn't her friend, she need not pay him, but if someone she can't satisfy is her good friend, she must pay g RMB to him as apologies for her fail.

Then, SmallR hope to acquire money as much as possible by this experiment. Please figure out the maximum money SmallR can acquire. By the way, it is possible that she can't obtain any money, even will lose money. Then, please give out the minimum money she should lose.

Input

The first line contains three integers nmg (1 ≤ n ≤ 104, 0 ≤ m ≤ 2000, 0 ≤ g ≤ 104). The second line contains n integers, each is 0 or 1, the sex of each dog, 0 represent the female and 1 represent the male. The third line contains n integers v1, v2, ..., vn (0 ≤ vi ≤ 104).

Each of the next m lines describes a rich folk. On the i-th line the first number is the appointed sex of i-th folk (0 or 1), the next two integers are wi and ki (0 ≤ wi ≤ 104, 1 ≤ ki ≤ 10), next ki distinct integers are the indexes of appointed dogs (each index is between 1 and n). The last number of this line represents whether i-th folk is SmallR's good friend (0 — no or 1 — yes).

Output

Print a single integer, the maximum money SmallR can gain. Note that the integer is negative if SmallR will lose money.

Example

Input
5 5 9
0 1 1 1 0
1 8 6 2 3
0 7 3 3 2 1 1
1 8 1 5 1
1 0 3 2 1 4 1
0 8 3 4 2 1 0
1 7 2 4 1 1
Output
2
Input
5 5 8
1 0 1 1 1
6 5 4 2 8
0 6 3 2 3 4 0
0 8 3 3 2 4 0
0 0 3 3 4 1 1
0 10 3 4 3 1 1
0 4 3 3 4 1 1
Output
16

题目大意就是有N个点,每个点一开始是黑色或者白色,把i点的颜色翻转需要v[i]的代价。
同时还有M个计划,每个计划要求计划内的点全黑或者全白,如果满足会得到l[i]的收益,
但是如果这个计划是朋友的而且没有被满足的话是需要付出g的代价的,其中g是题目中给定的常数。
求最大收益。 这是一个经典的最大权闭合子图的集合划分问题。
首先我们要把答案设置成所有可能得到的收益,然后再减去最少可能付出的代价。
而求这个最少可能付出的代价就是一个网络流的最小割问题。 本题中,我们把每个白点连S,黑点连T,容量为v[i],代表转换颜色的代价。
类似的,把每个白计划连S,黑计划连T,容量为l[i]+(该计划是否是朋友的?g:0),
代表舍弃这个计划的代价。 对于每个计划,如果计划中的一个节点的初始颜色和计划要求的颜色不一样,
那么把计划和该点连边,容量为inf,表示要么舍弃这个计划,要么让计划涉及的
异色节点全部翻转。 光这样还不行,因为可能一个点在某个计划中翻转了,而在另一个计划中不需要翻转。
所以我们最后需要把有冲突的计划连边,容量为inf,表示这两个计划不能同时选择。 然后就可以直接求解了。
# | JYYHH's solution for [CodeForces-311E]

Status      Time     Memory   Length     Lang
Accepted 31ms 13256kB GNU G++ 5.1. Submitted
-- ::
Shared #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#define ll long long
#define pb push_back
#define maxn 20005
using namespace std;
const int inf=<<;
vector<int> g[maxn];
struct lines{
int to,flow,cap;
}l[maxn*];
int n,m,G,S,T,t=-,cur[maxn];
int d[maxn],kk,val;
bool v[maxn]; inline void add(int xx,int yy,int zz){
l[++t]=(lines){yy,,zz},g[xx].pb(t);
l[++t]=(lines){xx,,},g[yy].pb(t);
} inline bool bfs(){
queue<int> q;
memset(v,,sizeof(v));
d[S]=,v[S]=,q.push(S); int x; lines e;
while(!q.empty()){
x=q.front(),q.pop();
for(int i=g[x].size()-;i>=;i--){
e=l[g[x][i]];
if(!v[e.to]&&e.flow<e.cap){
d[e.to]=d[x]+;
v[e.to]=;
q.push(e.to);
}
}
} return v[T];
} int dfs(int x,int a){
if(x==T||!a) return a;
int flow=,f,sz=g[x].size();
for(int &i=cur[x];i<sz;i++){
lines &e=l[g[x][i]];
if(d[x]==d[e.to]-&&(f=dfs(e.to,min(a,e.cap-e.flow)))){
flow+=f,a-=f;
e.flow+=f,l[g[x][i]^].flow-=f;
if(!a) break;
}
} return flow;
} inline int max_flow(){
int an=;
while(bfs()){
memset(cur,,sizeof(cur));
an+=dfs(S,inf);
}
return an;
} int tp[maxn],now,opt[maxn];
int tot,pos,ooOOooOOoo;
vector<int> bel[maxn]; int main(){
scanf("%d%d%d",&n,&m,&G); S=,T=n+m+;
for(int i=;i<=n;i++) scanf("%d",tp+i);
for(int i=;i<=n;i++){
scanf("%d",&now);
//白点连S,黑点连T,容量含义为转变颜色的代价
if(tp[i]) add(i,T,now);
else add(S,i,now);
} for(int i=;i<=m;i++){
scanf("%d%d%d",opt+i,&val,&kk); while(kk--){
scanf("%d",&pos);
if(opt[i]^tp[pos]){
//白计划连黑点,白点连黑计划,不能同时选择
if(opt[i]) add(pos,n+i,inf);
else add(n+i,pos,inf);
}
bel[pos].pb(i);
} //白计划连S,黑计划连T,容量含义为该计划不被满足的代价(g+val)
tot+=val,scanf("%d",&ooOOooOOoo);
if(ooOOooOOoo) val+=G;
if(opt[i]) add(n+i,T,val);
else add(S,n+i,val);
} //注意涉及同一个点的白计划和黑计划也不能共存
for(int i=;i<=n;i++){
int sz=bel[i].size(),to1,to2;
for(int j=;j<sz;j++){
to1=bel[i][j];
for(int u=j+;u<sz;u++){
to2=bel[i][u];
if(opt[to1]^opt[to2]){
if(opt[to1]) add(to2+n,to1+n,inf);
else add(to1+n,to2+n,inf);
}
}
}
} cout<<tot-max_flow()<<endl;
return ;
}

 

Codeforces 311E Biologist的更多相关文章

  1. 【CodeForces】【311E】Biologist

    网络流/最大权闭合图 题目:http://codeforces.com/problemset/problem/311/E 嗯这是最大权闭合图中很棒的一道题了- 能够1A真是开心-也是我A掉的第一道E题 ...

  2. Codeforces 311.E Biologist

    E. Biologist time limit per test 1.5 seconds memory limit per test 256 megabytes input standard inpu ...

  3. Codeforces Codeforces Round #484 (Div. 2) D. Shark

    Codeforces Codeforces Round #484 (Div. 2) D. Shark 题目连接: http://codeforces.com/contest/982/problem/D ...

  4. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  7. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  8. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  9. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

随机推荐

  1. Faster R-CNN教程

    Faster R-CNN教程 最后更新日期:2016年4月29日 本教程主要基于python版本的faster R-CNN,因为python layer的使用,这个版本会比matlab的版本速度慢10 ...

  2. [模拟赛] GotoAndPlay

    GotoAndPlay 10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生. 玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者... Description 小松鼠终于吃撑了, ...

  3. POJ1062:昂贵的聘礼(dfs)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 58108   Accepted: 17536 题目链接:http ...

  4. OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议

    简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...

  5. Java super和this

    this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本 ...

  6. Kafka自我学习3-Scalable

    1.After created the zookeeper cluster, we found all broker cluster topic can be find in zoo1, zoo2, ...

  7. Sync Data to AWS S3 on Windows Box

    1. Install AWS CLI first, windows download link https://s3.amazonaws.com/aws-cli/AWSCLI64.msi 2. The ...

  8. shell编程---变量赋值

    echo $filen | awk -F. '{print $3}'  怎么把上边这行脚本产生的字串赋给一个变量啊,实际上会产生一个数, 这个变量用来存这个数.格式应该是怎么写的? a=`echo $ ...

  9. php 上传csv文件

    php fgetcsv()函数 定义和用法 fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段. 与 fgets() 类似,不同的是 fgetcsv() 解析读入的行并找出 CSV 格式 ...

  10. jquery遍历之后代

    向下遍历dom树的jquery方法 children()方法返回被选元素的所有直接子元素,只会对向下一级对dom树进行遍历. 例子 代码: $(document).ready(function(){ ...