代码如下,运用搜索优化,出现9个RE,请教是什么问题
#include<bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for(int i = a;i <= b;i++)
using namespace std;
const int N = 2e8;
int n, m;
int v[40];
int z[N];
int tot;
int ans = 0x7ffffffff;
void dfs(int x, int u, int k, int t){ //当前点,上限,状态,操作次数
if(z[k]) z[k] = min(z[k], t); //更新花费
else z[k] = t;
if(z[k ^ tot] || k == tot) ans = min(ans, z[k ^ tot] + t);
if(x <= u){
dfs(x + 1, u, k, t); //不操作当前点
k = k ^ v[x];
dfs(x + 1, u, k, t + 1); //操作当前点
}
}
signed main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin >> n >> m;
FOR(i, 1, m){
int a, b;
cin >> a >> b;
v[a] = v[a] ^ 1 << b;
v[b] = v[b] ^ 1 << a;
}
FOR(i, 1, n){
v[i] = v[i] ^ 1 << i; //自身也会变化
tot = tot ^ 1 << i; //tot全部为1
}
dfs(1, n / 2, 0, 0);
dfs(n / 2 + 1, n, 0, 0);
cout << ans;
return 0;
}