POJ 2723 二分 2 sat 判定

2021-08-27 01:36:23 字數 1150 閱讀 8733

此題的題意很簡單,有一些個門, 還有2 * n個鑰匙分成了n組,每組裡有兩把鑰匙,並且每組中只能使用一把鑰匙, 然後每個門有兩把鎖,分別對應著鑰匙,兩個鎖只要任意開乙個門就會開啟,並且,要開啟乙個門,必須保證他序號之前的所有門都開啟了,類似於一關一關的往裡闖

然後思路的話,由於是必須順序的開門,所以可以進行二分列舉答案,如果列舉的數為m, 則我們要判定的就是1~m的門是否能被開啟, 就要用2-sat建圖判定了

#include #include #include #include #include #include #define maxn 5005

#define maxm 50005

#define inf 1000000000

using namespace std;

struct edge

edge[maxm];

int n, m, e;

int top, scc, index;

int low[maxn], dfn[maxn], instack[maxn];

int head[maxn], st[maxn], fa[maxn];

int a[maxn], b[maxn], hash[maxn];

int x[maxn], y[maxn];

void init()

void insert(int x, int y)

void tarjan(int u)

else if(instack[v]) low[u] = min(low[u], dfn[v]);

}if(dfn[u] == low[u])

while(v != u);

}}bool check(int n)

void build(int bound)

for(int i = 1; i <= bound; i++)

for(int i = 1; i <= 2 * n; i++)

if(!dfn[i]) tarjan(i);

}void solve()

printf("%d\n", ans);

}int main()

for(int i = 1; i <= m; i++)

solve();

}return 0;

}

COJ 1253 二分 2 sat判定

x城的精神病院只有兩個病房,一共關著n 名病人,編號分別為1 n。病人之間的關係有時極不和諧。很多病人之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 不和諧值 乙個正整數值 來表示某兩名病人之間的仇恨程度,不和諧值越大,則這兩名病人之間的積怨越多。如果兩名不和諧值為c 的病人被關在同一...

POJ 2749 2SAT判定 二分

題意 圖上n個點,使每個點都與倆個中轉點的其中乙個相連 二選一,典型2 sat 並使任意兩點最大 距離最小 最大最小,2分答案 有些點相互hata,不能選同乙個中轉點,有些點相互love,必需選相同中轉點 顯然是2sat條件 關鍵 每次二分列舉limit,按limit建圖,需要注意的是每條邏輯語句對...

調整衛星(2 SAT 二分答案)

問題描述 某國上空有 n 顆衛星。每顆衛星有一次調整的機會 必須調整一次 方式是衛星可以向 y 軸正方向移動或 y 軸負方向移動指定長度。現在請你給每個衛星發出指令,讓衛星向正方向移動或是負方向移動,使得最後衛星分布中最近的兩顆衛星的距離最遠。請輸出最近兩顆衛星距離的平方。輸入格式 輸入第一行為乙個...