Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910func CF546E(_r io.Reader, _w io.Writer) {11 in := bufio.NewReader(_r)12 out := bufio.NewWriter(_w)13 defer out.Flush()14 const inf int = 1e915 min := func(a, b int) int {16 if a < b {17 return a18 }19 return b20 }21 22 var N, m, v, w, s, maxFlow int23 Fscan(in, &N, &m)24 st, end, n := 2*N, 2*N+1, 2*N+225 type nb struct{ to, rid, cap int }26 g := make([][]nb, n)27 addEdge := func(from, to, cap int) {28 g[from] = append(g[from], nb{to, len(g[to]), cap})29 g[to] = append(g[to], nb{from, len(g[from]) - 1, 0})30 }31 for i := 0; i < N; i++ {32 Fscan(in, &v)33 addEdge(st, i, v)34 s += v35 }36 sum := s37 for i := N; i < 2*N; i++ {38 Fscan(in, &v)39 addEdge(i, end, v)40 s -= v41 }42 if s != 0 {43 Fprint(out, "NO")44 return45 }46 for i := 0; i < N; i++ {47 addEdge(i, i+N, inf)48 }49 for ; m > 0; m-- {50 Fscan(in, &v, &w)51 v--52 w--53 addEdge(v, w+N, inf)54 addEdge(w, v+N, inf)55 }56 57 dep := make([]int, n)58 bfs := func() bool {59 for i := range dep {60 dep[i] = -161 }62 dep[st] = 063 q := []int{st}64 for len(q) > 0 {65 v := q[0]66 q = q[1:]67 for _, e := range g[v] {68 if w := e.to; e.cap > 0 && dep[w] < 0 {69 dep[w] = dep[v] + 170 q = append(q, w)71 }72 }73 }74 return dep[end] >= 075 }76 var it []int77 var dfs func(int, int) int78 dfs = func(v, minF int) int {79 if v == end {80 return minF81 }82 for ; it[v] < len(g[v]); it[v]++ {83 e := &g[v][it[v]]84 if w := e.to; e.cap > 0 && dep[w] > dep[v] {85 if f := dfs(w, min(minF, e.cap)); f > 0 {86 e.cap -= f87 g[w][e.rid].cap += f88 return f89 }90 }91 }92 return 093 }94 for bfs() {95 it = make([]int, n)96 for {97 if f := dfs(st, inf); f > 0 {98 maxFlow += f99 } else {100 break101 }102 }103 }104 if maxFlow < sum {105 Fprint(out, "NO")106 return107 }108 Fprintln(out, "YES")109 for _, es := range g[:N] {110 ans := make([]int, N)111 for _, e := range es {112 if w := e.to; N <= w && w < 2*N {113 ans[w-N] = g[w][e.rid].cap114 }115 }116 for _, v := range ans {117 Fprint(out, v, " ")118 }119 Fprintln(out)120 }121}122 123124