graph LR NPHD["NPO-hard\nGeneral TSP, SAT\nNo approximation possible"] -->|"hardest"| APX["APX-hard\nVertex Cover, Metric TSP\nConstant-factor approx"] APX -->|"hard"| PTAS["PTAS\nPlanar Vertex Cover\n(1+ฮต)-approx"] PTAS -->|"easier"| FPTAS["FPTAS\nKnapsack\nPoly in n and 1/ฮต"] FPTAS -->|"easiest"| P["P\nShortest Path, MST\nExact solution"] style NPHD fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style APX fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style PTAS fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style FPTAS fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style P fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
graph LR A(("A")) ---|"10"| B(("B")) A ---|"15"| C(("C")) A ---|"12"| D(("D")) B ---|"8"| C B ---|"9"| D C ---|"11"| D style A fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style D fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440
flowchart LR A["Complete Graph"] --> B["๐ฒ MST"] B --> C["๐ข Odd-degree nodes"] C --> D["๐ Min Perfect Matching"] B --> E["๐ MST โช Matching"] D --> E E --> F["๐ Eulerian Circuit"] F --> G["โ๏ธ Shortcut โ Tour"] G --> H["โ โค 1.5ร OPT"] style A fill:#fffde7,stroke:#f57f17,stroke-width:3px style H fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px
graph LR subgraph S["Set S"] A(("A")) B(("B")) end subgraph VS["Set V \ S"] C(("C")) D(("D")) end A ===|"5 โ"| C A -..-|"3 โ"| D B ===|"7 โ"| C B -..-|"2 โ"| D linkStyle 0 stroke:#4caf50,stroke-width:3px linkStyle 1 stroke:#4caf50,stroke-width:3px linkStyle 2 stroke:#4caf50,stroke-width:3px linkStyle 3 stroke:#4caf50,stroke-width:3px style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fce4ec,stroke:#ad1457,stroke-width:3px style D fill:#fce4ec,stroke:#ad1457,stroke-width:3px
graph LR A["Planar Graph\nwith MAX-CUT\nNP-hard in general"] --> B["Construct\nDual Graph\n๐บ๏ธ"] B --> C["Identify\nOdd Faces ๐ข"] C --> D["All-Pairs\nShortest Paths\nin Dual ๐ฃ๏ธ"] D --> E["Min-Weight\nPerfect Matching\non Odd Faces ๐"] E --> F["Recover\nMaximum Cut\nโ Polynomial!"] style A fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440