P2962 Lights G,RE求助
  • 板块题目总版
  • 楼主liuhx201803
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/22 21:34
  • 上次更新2023/10/22 21:40:43
查看原帖
P2962 Lights G,RE求助
1025291
liuhx201803楼主2023/10/22 21:34

代码如下,运用搜索优化,出现99个RERE,请教是什么问题

#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;
}

2023/10/22 21:34
加载中...