关于2
在2-sat判定问题中我们经常会遇到这样一种情况,在一组相互矛盾的点Si和Si'中,必须选择Si而不能选择Si'。比如在poj 3678中有“每个数都是0或者是1,但是如果ab==1,则a和b都必须是1才可以满足”,在poj 3648有妻子必须坐在左侧,等等……。 拿poj 3678举例
在2-sat判定问题中我们经常会遇到这样一种情况,在一组相互矛盾的点Si和Si'中,必须选择Si而不能选择Si'。比如在poj 3678中有“每个数都是0或者是1,但是如果a&&b==1,则a和b都必须是1才可以满足”,在poj 3648有妻子必须坐在左侧,等等……。拿poj 3678举例,网上的解决方法大都是这样的:用Si表示第i个变量的值为1,用表Si'示第i个变量的值是0。如果第i个变量必须置为1,则加上一条边(Si'-->Si)。而且描述一般就是“如果选择~x,则x必须选,所以就产生了矛盾”,但是我们知道在2-sat中判定是否存在矛盾的方法是判断每一组Si和Si'是否在一个强联通分量中,这个矛盾又怎样通过求强连通分量来发现呢?也就是说,这种方法虽然对,但是关于为什么要这样的描述非常模糊。
我们知道2-sat在ACM中的应用主要有两种,一种是通过建图的情况判断是否存在可行的方案,另一种是得出有解后再反向构图,拓扑排序,染色得到一组可行解。
对于只要判断是否存在可行方案,如果Si和Si'之间互相不可达的话其实加上或者不加这条边其实是没有什么任何影响的,如下图:
如果在1和2之间必须要选择2的话,则连接一条从1指向2的边,该图的不受任何影响。

但是之所以要加上这边是为了防止下面这种情况的出现:
该图中包括第一组在内的所有组中的两个点都不属于同一个强连通分量,符合2-sat,但是观察点1和点2后会发现从2出发可以到达1,但是从1出发却无法抵达2点,从逻辑上来说就是如果2发生则1必须会发生(由于1和2是对立事件,也就是说选择2的话会产生矛盾)。但是由于1并不能推出2,所以第一组仍然符合2-sat。这个时候如果规定在第一组中必须选择2。也就是加一条1-->2的边后就会使得1和2处于同一个强连通分量中,被判定无解。
对于输出一组解的问题,我的想法是如果连一条从1-->2的弧之后。在反向加边后,由于1和2肯定属于不同的联通分量,所以肯定会存在一条从belon[2]-->belon[1]的边存在。从而使得在拓扑排序中belon[2]较belon[1]更优先被染成1,且保证belon[1]肯定被染成-1。
以上就是我对这个问题的理解,希望大家互相交流学习,本文博客地址:http://blog.csdn.net/ac_operation/article/details/6972358

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

This article addresses MySQL's "unable to open shared library" error. The issue stems from MySQL's inability to locate necessary shared libraries (.so/.dll files). Solutions involve verifying library installation via the system's package m

This article explores optimizing MySQL memory usage in Docker. It discusses monitoring techniques (Docker stats, Performance Schema, external tools) and configuration strategies. These include Docker memory limits, swapping, and cgroups, alongside

The article discusses using MySQL's ALTER TABLE statement to modify tables, including adding/dropping columns, renaming tables/columns, and changing column data types.

This article compares installing MySQL on Linux directly versus using Podman containers, with/without phpMyAdmin. It details installation steps for each method, emphasizing Podman's advantages in isolation, portability, and reproducibility, but also

This article provides a comprehensive overview of SQLite, a self-contained, serverless relational database. It details SQLite's advantages (simplicity, portability, ease of use) and disadvantages (concurrency limitations, scalability challenges). C

Article discusses configuring SSL/TLS encryption for MySQL, including certificate generation and verification. Main issue is using self-signed certificates' security implications.[Character count: 159]

This guide demonstrates installing and managing multiple MySQL versions on macOS using Homebrew. It emphasizes using Homebrew to isolate installations, preventing conflicts. The article details installation, starting/stopping services, and best pra

Article discusses popular MySQL GUI tools like MySQL Workbench and phpMyAdmin, comparing their features and suitability for beginners and advanced users.[159 characters]
