So... enter to test my skills... Okay, I am not sorry ~ Wow, haha ~
# Include <iostream> # include <string> # include <cstdio> # define Mn 111 using namespace STD; int N, F, E, D, ANS, S, T; int map [Mn] [Mn], que [Mn], a [Mn], vis [Mn], pre [Mn]; void setg () {int I, U, v, C; ans = 0; S = n + 1; t = n + 2; memset (MAP, 0, sizeof (MAP); for (I = 0; I <E; I ++) {scanf ("\ n (% d, % d) % d", & U, & V, & C ); // printf ("% d \ n", U, V, c); map [u] [v] + = C ;}for (I = 0; I <F; I ++) {scanf ("\ n (% d) % d", & U, & C ); // printf ("% d \ n", U, C ); Map [s] [u] + = C ;}for (I = 0; I <D; I ++) {scanf ("\ n (% d) % d ", & U, & C); // printf ("% d \ n", U, c); map [u] [T] + = C ;}} bool BFS () {memset (VIS, 0, sizeof (VIS); int head = 0, foot = 0; que [Foot ++] = s; vis [s] = true; A [s] = int_max; while (Head <foot) {int u = que [head ++]; for (INT I = 0; I <= T; I ++) {If (! Vis [I] & map [u] [I]) {vis [I] = true; que [Foot ++] = I; A [I] = min (A [u], map [u] [I]); Pre [I] = u; if (I = T) return true ;}}return false;} void work () {int m; while (BFS () {M = T; ans + = A [T]; while (M! = S) {map [pre [m] [m]-= A [T]; Map [m] [pre [m] + = A [T]; M = pre [m] ;}} printf ("% d \ n", ANS);} int main () {While (scanf ("% d", & N, & F, & D, & E )! = EOF) {setg (); Work ();} return 0 ;}