+
    �°³j¦  ã                   ó¢   € R t ^ RIt^RIHt ^RIHt RR.t]! R4      ]P                  ! RR7      RR	 l4       4       t	]P                  R
 4       t
R# )a  Functions for finding node and edge dominating sets.

A `dominating set`_ for an undirected graph *G* with node set *V*
and edge set *E* is a subset *D* of *V* such that every node not in
*D* is adjacent to at least one member of *D*. An `edge dominating set`_
is a subset *F* of *E* such that every edge not in *F* is
incident to an endpoint of at least one edge in *F*.

.. _dominating set: https://en.wikipedia.org/wiki/Dominating_set
.. _edge dominating set: https://en.wikipedia.org/wiki/Edge_dominating_set

N)Únot_implemented_for)Úmaximal_matchingÚmin_weighted_dominating_setÚmin_edge_dominating_setÚdirectedÚweight)Ú
node_attrsc           	     ó\  a aa€ \        S 4      ^ 8X  d   \        4       # \        4       pV VV3R lp\        S 4      oS  Uu/ uF  qDV0\        S V,          4      ,          bK  	  ppS'       d<   \        VP                  4       VR7      w  rgVP	                  V4       WV SV,          oKC  V# u upi )a´  Returns a dominating set that approximates the minimum weight node
dominating set.

Parameters
----------
G : NetworkX graph
    Undirected graph.

weight : string
    The node attribute storing the weight of an node. If provided,
    the node attribute with this key must be a number for each
    node. If not provided, each node is assumed to have weight one.

Returns
-------
min_weight_dominating_set : set
    A set of nodes, the sum of whose weights is no more than `(\log
    w(V)) w(V^*)`, where `w(V)` denotes the sum of the weights of
    each node in the graph and `w(V^*)` denotes the sum of the
    weights of each node in the minimum weight dominating set.

Examples
--------
>>> G = nx.Graph([(0, 1), (0, 4), (1, 4), (1, 2), (2, 3), (3, 4), (2, 5)])
>>> nx.approximation.min_weighted_dominating_set(G)
{1, 2}

Raises
------
NetworkXNotImplemented
    If G is directed.

Notes
-----
This algorithm computes an approximate minimum weighted dominating
set for the graph `G`. The returned solution has weight `(\log
w(V)) w(V^*)`, where `w(V)` denotes the sum of the weights of each
node in the graph and `w(V^*)` denotes the sum of the weights of
each node in the minimum weight dominating set for the graph.

This implementation of the algorithm runs in $O(m)$ time, where $m$
is the number of edges in the graph.

References
----------
.. [1] Vazirani, Vijay V.
       *Approximation Algorithms*.
       Springer Science & Business Media, 2001.

c                ó¨   <€ V w  r\        VS,          4      pV^ 8X  d   \        R4      # SP                  V,          P                  S^4      V,          # )zœReturns the cost-effectiveness of greedily choosing the given
node.

`node_and_neighborhood` is a two-tuple comprising a node and its
closed neighborhood.

Úinf)ÚlenÚfloatÚnodesÚget)Únode_and_neighborhoodÚvÚneighborhoodÚ	uncoveredÚGÚuncovered_nodesr   s   &   €€€Úq/home/luca/screen-checking/.venv/lib/python3.14/site-packages/networkx/algorithms/approximation/dominating_set.pyÚ_costÚ*min_weighted_dominating_set.<locals>._costS   sL   ø€ ð 0‰ˆô
 ˜ Õ6Ó7ˆ	Ø˜Œ>Ü˜“<ÐØ�w‰w�q�z�~‰~˜f aÓ(¨9Õ4Ð4ó    )Úkey)r   ÚsetÚminÚitemsÚadd)	r   r   Údom_setr   r   ÚneighborhoodsÚdom_nodeÚmin_setr   s	   ff      @r   r   r      s�   ú€ ôl ˆ1ƒv�„{Ü‹uˆô ‹e€G÷5ô& ˜!“f€Oá12Ó3±¨A˜˜œc ! A¥$›i�Ò'±€MÐ3÷ ô   × 3Ñ 3Ó 5¸5ÔAÑˆð 	�‰�HÔØÐ#Ø˜7Õ"Šà€Nùò 4s   ¿#B)c                ó>   € V '       g   \        R4      h\        V 4      # )ar  Returns minimum cardinality edge dominating set.

Parameters
----------
G : NetworkX graph
  Undirected graph

Returns
-------
min_edge_dominating_set : set
  Returns a set of dominating edges whose size is no more than 2 * OPT.

Examples
--------
>>> G = nx.petersen_graph()
>>> nx.approximation.min_edge_dominating_set(G)
{(0, 1), (4, 9), (6, 8), (5, 7), (2, 3)}

Raises
------
ValueError
    If the input graph `G` is empty.

Notes
-----
The algorithm computes an approximate solution to the edge dominating set
problem. The result is no more than 2 * OPT in terms of size of the set.
Runtime of the algorithm is $O(|E|)$.
z"Expected non-empty NetworkX graph!)Ú
ValueErrorr   )r   s   &r   r   r   y   s   € ÷> ÜÐ=Ó>Ð>Ü˜AÓÐr   )N)Ú__doc__ÚnetworkxÚnxÚutilsr   Úmatchingr   Ú__all__Ú_dispatchabler   r   © r   r   Ú<module>r-      si   ðñó å (Ý 'à(Ð*CÐ
D€ñ �ZÓ Ø×Ò˜XÔ&ó]ó 'ó !ð]ð@ ×Ññ ó ò r   