#include<iostream> #include<queue> using namespace std; #define VMAX 102 int s,t; int father[VMAX]; int c[VMAX][VMAX];//顶点从0--(n-1) int Ford_Fulkerson( ) { while(1) { queue <int> q; memset(father, -1, sizeof(father)); int now; q.push(s); father[s]=s; while(!q.empty()) { now = q.front(); q.pop(); for(int i=0; i<=t; i++) { if(c[now][i] && father[i]==-1) { father[i] = now; q.push(i); } } if(father[t]!=-1) break; } if(father[t]==-1 ) break; int u, min = 0xFFFF; for(u=t; u!=s; u=father[u]) { if(c[father[u]][u] < min) min = c[father[u]][u]; } for(u=t; u!=s; u=father[u]) { c[father[u]][u] -= min; c[u][father[u]] += min; } } int maxFlow = 0; for(int i=0; i<=t; i++) maxFlow += c[t][i]; return maxFlow; } void init(int d,int b,int cc) { int v,u,val; for(int i=0;i<d;i++) { while(getchar()!='(');scanf("%d,",&v); scanf("%d)",&u); scanf("%d",&val); c[v][u]+=val; } for(int i=0;i<b;i++) { while(getchar()!='('); scanf("%d)",&v); scanf("%d",&val); c[s][v]+=val; } for(int i=0;i<cc;i++) { while(getchar()!='('); scanf("%d)",&v); scanf("%d",&val); c[v][t]+=val; } //return 0; } void prin() { for(int i=0;i<=t;i++) { for(int j=0;j<=t;j++) cout<<c[i][j]<<" "<<i<<" "<<j<<","; cout<<endl; } } int main() { int a,b,cc,d; while(scanf("%d%d%d%d",&a,&b,&cc,&d)!=EOF) { s=a;t=a+1; memset(c,0,sizeof(c)); init(d,b,cc); //prin(); printf("%d/n",Ford_Fulkerson()); } return 0; }