problem each node solves depends on the dual variable $\lambda$ through $\gamma_p$. In fact, we can derive a formula for updating $\gamma_p$ from : write  edge-wise, $\lambda_{\{i,j\}}^{(k+1)} = \lambda_{\{i,j\}}^{(k)} + \rho \,\text{sign}(j-p)(x_i^{k+1} - x_j^{k+1})$, and insert this formula in the definition of $\gamma_p^k$; the result is $
        \gamma_p^{k+1} = \gamma_p^k + \rho \sum_{j \in \mathcal{N}_p}(x_p^{k+1} - x_j^k)\,.
    $ In sum, we arrive at the following algorithm, named D-ADMM, after *Distributed*-ADMM.

\[Alg:ADMMBipartite\]

for all $p \in \mathcal{V}$, set $\gamma_{p}^{1} = x_p^{1} = 0$ and $k=1$ \[SubAlg:ADMMBipLoop\] Set $v_p^{k} =  \gamma_p^{k} -\rho \sum_{j \in \mathcal{N}_p} x_j^{k}$ and find \[SubAlg:ADMMBipOptimProb\] $$x_p^{k+1}   = \begin{array}[t]{cl}
                           \textrm{argmin} & f_p(x_p) + {v_p^{k}}^\top x_p + \frac{D_p \rho}{2}\|x_p\|^2\\
                            \textrm{s.t.} & x_p \in X_p
                          \end{array}$$ Send $x_p^{k+1}$ to $\mathcal{N}_p$ \[SubAlg:ADMMBipCommunication\]

\[SubAlg:ADMMBipEndLoop\]

Repeat \[SubAlg:ADMMBipLoop\]-\[SubAlg:ADMMBipEndLoop\] for all $p \in \mathcal{C}_2$, replacing $x_j^{k}$ by $x_j^{k+1}$ in $v_p^k$

$
            \gamma_p^{k+1} = \gamma_p^{k} + \rho \sum_{j \in \mathcal{N}_p} (x_p^{k+1} -  x_j^{k+1})
        $ \[SubAlg:ADMMBipDualVarUp\] $k \gets k+1$

In Algorithm \[Alg:ADMMBipartite\], there are two groups of nodes: $\mathcal{C}_1$ and $\mathcal{C}_2$. In each group, the nodes are not neighbors between themselves and operate at the same time. In particular, one node receives $x_j^k$ or $x_j^{k+1}$ from all its neighbors and then solves the optimization problem of step \[SubAlg:ADMMBipOptimProb\], 