为什么WA且仅WA on #1 #2 #3 #8?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
inline int read() {
int f = 1, x = 0;char ch = getchar();
while(ch < '0' || ch > '9') {if(ch == '-')f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') {x = x * 10 + ch - 48; ch = getchar(); }
return x * f;
}
const int N = 1e5 + 10;
const int M = 4e6 + 10;
const int AN94 = 1e9;
int S, T, ans;
int n, a[N], b[N], idn;
int m, c1[N], c2[N];
vector<int> v[N];
int idx, pre[N], cur[N];
int e[M], ne[M], val[M];
void add(int u, int v, int w){
e[idx] = v, ne[idx] = pre[u], val[idx] = w;
pre[u] = idx++;
}
int dep[N];
bool bfs(){
memset(dep, -1, sizeof(dep));
queue<int>q;
q.push(S);
dep[S] = 1;
cur[S] = pre[S];
while(!q.empty()){
int p = q.front();
q.pop();
for(int i = pre[p]; ~i; i = ne[i]){
int to = e[i];
if(dep[to] == -1 && val[i]){
dep[to] = dep[p] + 1;
cur[to] = pre[to];
if(to == T)return 1;
q.push(to);
}
}
}
return 0;
}
int dfs(int x, int flw){
if(x == T)return flw;
int k = 0, res = 0;
for(int i = cur[x]; ~i && flw; i = ne[i]){
int to = e[i];
cur[x] = i;
if(dep[to] == dep[x] + 1 && val[i]){
k = dfs(to, min(flw, val[i]));
if(!k)cur[x] = -1;
val[i] -= k;
val[i ^ 1] += k;
res += k;
flw -= k;
}
}
return res;
}
int dinic(){
int tmp = 0, flw;
while(bfs())
while(flw = dfs(S, AN94))
tmp+=flw;
return tmp;
}
signed main(){
memset(pre, -1, sizeof(pre));
n = read();
S = 0, T = 5 * n;
for(int i = 1; i <= n; i++)a[i] = read();
for(int i = 1; i <= n; i++)b[i] = read();
m = read();
for(int i = 1; i <= m; i++){
int k = read();
c1[i] = read(), c2[i] = read();
for(int j = 1; j <= k; j++){
int x = read();
v[i].push_back(x);
}
ans += c1[i] + c2[i];
}
for(int i = 1; i <= n; i++){
add(S, i, a[i]);
add(i, S, 0);
add(i, T, b[i]);
add(T, i, 0);
ans += a[i] + b[i];
}
idn = n;
for(int i = 1; i <= n; i++){
idn++;
add(S, idn, c1[i]);
for(int j = 0; j < v[i].size(); j++){
add(idn, v[i][j], AN94);
add(v[i][j], idn, 0);
}
idn++;
add(idn, T, c2[i]);
for(int j = 0; j < v[i].size(); j++){
add(v[i][j], idn, AN94);
add(idn, v[i][j], 0);
}
}
int res = dinic();
cout<<ans - res;
return 0;
}