题意是说,2N把钥匙,M个门,每个门有两个锁,开其中一个就可以,把2N把钥匙分成Npair,用了其中一把,另一把就不再出现,而用的那把可以循环使用,问最多能开多少扇门?
解法:2-SAT+二分
因为开门是有序的,所以二分答案。
设有4N把锁,其中1~2N表示锁i(1<=i<=2N)使用,2N+1~4N表示锁j(1<=j<=2N)抛弃,接着就是激动人心的建图!先建不能共存的锁,再对门进行建图。最后就缩点
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <string.h>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
using namespace std;
int lowbit(int t