Decomposition of a bipartite graph $G$ into $k$ edge-disjoint spanning subgraphs. $\textbf{Question:}$  Let G be any bipartite graph and suppose that $k\geqslant 1$. Then $G$ is the union of $k$ edge disjoint spanning subgraphs $G_1 , G_2, \ldots, G_k$ such that $$\left\lfloor\frac{d(x)}{k}\right\rfloor\leqslant d_{G_i}(x)\leqslant\left\lceil\frac{d(x)}{k}\right\rceil$$ for each $x\in V(G).$ Where $d(x)$ means the degree of a vertex $x\in V(G)$ in the graph $G$, $d_{G_i}(x)$ means the degree of the vertex $x$ in the $i$-th spanning subgraph i.e., $G_i$, and edge-disjoint means that there is no common edge in any of the $k$ spanning subgraphs.
$\textbf{Approach:}$ I believe the question is asking us to prove the existence of such a decomposition for each $k\geqslant 1$. In this case, I tried thinking along the lines of combinatorics. If we consider $d(x)=\alpha$ as a collection of $\alpha$ objects which need to be divided into $k$ boxes (i.e., the edge-disjoint spanning subgraphs) with each box having at least some edges coming out of $x$. Then, we can follow an algorithm in which we assign 1 edge in each iteration to the $k$ spanning subgraphs. Once we reach a stage where $k$ is greater than the remaining number of edges we assign the remaining edges randomly to some of the $G_i$'s. This will ensure that $\alpha$ is partitioned into $k$ many $G_i$'s and the edge-disjoint condition is preserved. After following this algorithm we will have a decomposition that satisfies the condition given in the question.
Is my understanding of the question correct? Is my approach correct? Is the algorithm correct? If yes, can you prove its correctness?
 A: It's enough to prove that we can always find a single spanning subgraph $H$ of $G$ such that $$\left\lfloor\frac{d(v)}{k}\right\rfloor\leq d_H(v)\leq \left\lceil\frac{d(v)}{k}\right\rceil$$
for all $v \in V(G)$. If we can do this, then we repeat on $G-H$ with $k$ replaced by $k-1$, until we get down to $k=1$ and can just take the entire remaining subgraph.
(There's some things to check to show that this recursion works, but it does. An equivalent toy problem: suppose $k$ people want to split $n$ slices of cake. They go up to the cake in turns. When you come up, if there are $j$ people including you with no cake yet, you take $\frac1j$ of the slices left, rounding up or down as you choose. Then in the end, everyone gets $\lfloor \frac nk\rfloor$ or $\lceil \frac nk \rceil$ pieces of cake.)

To find $H$, we define a flow circulation problem.
Let $X \cup Y$ be the bipartition of $G$. We turn all edges of $G$ into arcs oriented from $X$ to $Y$ which can accommodate between $0$ and $1$ flow, with the intent that a flow of $1$ on an arc means that the corresponding edge is in $H$, and a flow of $0$ means that the edge is not in $H$.
To ensure that the degree conditions in $H$ are satisfied, we add a new vertex $*$. For every vertex $x \in X$, we add an arc from $*$ to $x$ which can accommodate between $\lfloor \frac{d(x)}{k}\rfloor$ and $\lceil \frac{d(x)}{k}\rceil$ flow. For every vertex $y \in Y$, we do the same thing, except that the arc goes from $y$ to $*$.
Flow conservation at a vertex $x \in X$ means that the total flow out of $x$ must be between $\lfloor \frac{d(x)}{k}\rfloor$ and $\lceil \frac{d(x)}{k}\rceil$; when the flows are integers, it means that we've chosen either $\lfloor \frac{d(x)}{k}\rfloor$ or $\lceil \frac{d(x)}{k}\rceil$ edges out of $x$ to put in $H$. Similarly, flow conservation at $y \in Y$ will mean that we've chosen either $\lfloor \frac{d(y)}{k}\rfloor$ or $\lceil \frac{d(x)}{k}\rceil$ edges incident on $y$ to put in $H$.
There is a feasible fractional flow circulation: have $\frac1k$ flow along every arc from $X$ to $Y$, $\frac{d(x)}{k}$ flow along every arc from $*$ to a vertex $x \in X$, and $\frac{d(y)}{k}$ flow along every arc from a vertex $y \in Y$ to $*$. However, flow conservation constraints are totally unimodular, which means that if a feasible fractional flow exists (it does) and the bounds are integers (they are), then a feasible integer flow also exists. This integer flow gives us the graph $H$, as outlined above.

I know I just pulled out some high-powered network flow theorems here. One good resource to learn more about these is West's Introduction to Graph Theory, chapter 4, section 3. It begins by talking about the standard source/sink flow problems, and corollary 4.3.12 (the integrality theorem) gives the result I used above for those: if a feasible flow exists, a feasible integer flow exists. Later, 4.3.20 talks about how to convert flow circulation problems (which is what I used here) into source/sink flow problems.
