graph LR A((A: w=1)) --- B((B: w=3)) A --- C((C: w=2)) B --- C style A fill:#5e81ac,stroke:#2e3440,color:#fff style B fill:#5e81ac,stroke:#2e3440,color:#fff style C fill:#5e81ac,stroke:#2e3440,color:#fff
graph TD subgraph "After Phase 1" A((0)) --- B((1)) B --- C((2)) end subgraph "After Reverse-Delete" D((0)) --- E((1)) end style A fill:#5e81ac,stroke:#2e3440,color:#fff style B fill:#5e81ac,stroke:#2e3440,color:#fff style C fill:#bf616a,stroke:#2e3440,color:#fff style D fill:#5e81ac,stroke:#2e3440,color:#fff style E fill:#5e81ac,stroke:#2e3440,color:#fff
graph LR 0((0)) --- 1((1)) 1 --- 2((2)) 2 --- 0 style 0 fill:#5e81ac,stroke:#2e3440,color:#fff style 1 fill:#5e81ac,stroke:#2e3440,color:#fff style 2 fill:#5e81ac,stroke:#2e3440,color:#fff
graph LR U(("u: w = 100")) V(("v: w = 1")) U --- V style U fill:#bf616a,stroke:#2e3440,color:#fff style V fill:#a3be8c,stroke:#2e3440,color:#fff
graph LR subgraph "GPU Device" T0["Thread 0\n(Trial 0)"] T1["Thread 1\n(Trial 1)"] T2["Thread 2\n(Trial 2)"] TN["Thread N-1\n(Trial N-1)"] end Input["Graph + Weights"] --> T0 Input --> T1 Input --> T2 Input --> TN T0 --> Best["Best Cover\n(min cost)"] T1 --> Best T2 --> Best TN --> Best style Input fill:#d08770,stroke:#2e3440,color:#fff style Best fill:#a3be8c,stroke:#2e3440,color:#fff
graph TD MWVC["Minimum Weighted\nVertex Cover"] Exact["Exact Algorithms"] Approx["Approximation Algorithms"] Single["Single Trial"] Multi["Multi-Trial\n(Monte Carlo)"] PD["Primal-Dual\n2-Approx"] FG["Fast Greedy\n(no post-proc)"] Pitt["Pitt's Algorithm\n(Python / C++)"] GPU["GPU-Accelerated\n(Numba CUDA)"] MT["C++20 Multi-Threaded\n(Thread Pool)"] MWVC --> Exact MWVC --> Approx Approx --> Single Approx --> Multi Exact --> PD Exact --> FG Single --> Pitt Multi --> GPU Multi --> MT style MWVC fill:#d08770,stroke:#2e3440,color:#fff style Exact fill:#5e81ac,stroke:#2e3440,color:#fff style Approx fill:#5e81ac,stroke:#2e3440,color:#fff style Single fill:#5e81ac,stroke:#2e3440,color:#fff style Multi fill:#5e81ac,stroke:#2e3440,color:#fff style PD fill:#a3be8c,stroke:#2e3440,color:#fff style FG fill:#ebcb8b,stroke:#2e3440,color:#fff style Pitt fill:#a3be8c,stroke:#2e3440,color:#fff style GPU fill:#bf616a,stroke:#2e3440,color:#fff style MT fill:#bf616a,stroke:#2e3440,color:#fff
graph TD Net("Net N") --- V1(("v1: w=1")) Net --- V2(("v2: w=2")) Net --- V3(("v3: w=3")) Net --- V4(("v4: w=4")) style Net fill:#d08770,stroke:#2e3440,color:#fff style V1 fill:#a3be8c,stroke:#2e3440,color:#fff style V2 fill:#5e81ac,stroke:#2e3440,color:#fff style V3 fill:#ebcb8b,stroke:#2e3440,color:#fff style V4 fill:#bf616a,stroke:#2e3440,color:#fff
graph LR subgraph "Python netlistx" RC["rand_cover.py\nrand_vertex_cover()"] RCG["rand_cover_gpu.py\nrand_vertex_cover_gpu()"] end subgraph "C++20 netlistx-cpp" CH["cover.hpp\npd_cover()\nmin_vertex_cover()"] RH["rand_cover.hpp\nrand_vertex_cover_trial()\nrand_vertex_cover_mt()\nhypergraph versions"] end RCG -.->|"Inspired"| RH