圖中不允許奇環。每走一步狀態翻轉,回到起點時狀態必須相同。求至少刪除幾條邊使圖無奇環,即使圖成為二分圖。
N ≤ 15,狀態壓縮枚舉點集分為兩側。枚舉所有 2^N 種二分方式,統計同側端點的邊數(需刪除),取最小值。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 510;
struct Edge { int u, v; } e[maxn];
int color[maxn], n, m;
int main() {
int T; scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
for (int i=0; i>i)&1;
int sum = 0;
for (int i=0; i
O(2^N * M),N=15 時約 3.2e7 操作,可行。