def Effic_ULdigraph_Disconnected(N, L):
    """
    Smallest possible efficiency of a digraph that is not strongly connected.

    Calculates the smallest possible efficiency that a digraph of arbitrary
    number of nodes N and number of directed arcs L could possibly have.
    When digraphs are allowed to be disconnected, the smallest efficiency any
    digraph could have is E_dUL = density. This is true for any value of
    L <= 1/2 N(N-1), or density <= 1/2. For larger link densities, special
    cases exists for which the smallest efficiency is larger than the density.
    While the configuration of such cases is as today not fully understood,
    the density is an excellent approximation for those cases as well.
    Therefore, this function returns, E_dUL = dens.

    Reference and citation
    ^^^^^^^^^^^^^^^^^^^^^^
    G. Zamora-López & R. Brasselet "Sizing complex networks" Commun Phys 2:144 (2019)

    Parameters
    ----------
    N : integer
        Number of nodes in the digraph.
    L : integer
        Number of undirected edges in the digraph.

    Returns
    -------
    efficiency : float
        The smallest efficiency a digraph could take.

    See Also
    --------
    Pathlen_ULdigraph :
    """
    if N < 2:
        raise ValueError('Network needs at least two nodes, N > 1')
    Ltot = N * (N - 1)
    if L < 0:
        raise ValueError('L does not take negative values')
    if L > int(Ltot):
        raise ValueError('L out of range. max(L) = N*(N-1)')
    efficiency = float(L) / Ltot
    return efficiency
