int ExpandKey(u64 K[], u256 rk[], u64 key[]) { u64 A=K[0], B=K[1], C=K[2], D=K[3]; EK(A,B,C,D,rk,key); return 0; }
int main() { int i, j, k, l, m; int tmp, ans; while(scanf("%d %d %d", &cows, &foods, &drinks) != EOF) { S = 0; T = 2*cows + foods + drinks + 1; memset(Graph, 0, sizeof(Graph)); for(i = 1; i <= foods; i++) Graph[S][i] = 1; for(i = 1; i <= drinks; i++) Graph[foods+2*cows+i][T] = 1; for(i = 1; i <= cows; i++) { scanf("%d %d", &j, &k); #if DEBUG printf("j:%d k:%d\n", j, k); #endif if(j == 0)//no food, S links to left cow[i] { Graph[S][foods+i] = 1; printf("I j==0, Graph[S][%d]:%d\n", foods+i, Graph[S][foods+i]); } else { for(l = 1; l <= j; l++) { scanf("%d", &tmp); Graph[tmp][foods+i] = 1; } } Graph[foods+i][foods+cows+i] = 1;//left cow to right cow if(k == 0)//no drinks, right cow[i] links to T Graph[foods+cows+i][T] = 1; else { for(l = 1; l <=k; l++) { scanf("%d", &tmp); Graph[foods+cows+i][foods+2*cows+tmp] = 1; } } } #if DEBUG showGraph(); #endif ans = EK(); printf("%d\n", ans); } return 0; }