萌新刚学状压1ms求调,悬关
查看原帖
萌新刚学状压1ms求调,悬关
974277
水星湖psgqwq楼主2024/8/12 23:33
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 20;
int n, m, a[25][25], f[1<<N][N], ans;


signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m;
    for(int u, v, i = 1; i <= m; i++) {
        cin >> u >> v;
        a[u][v] = a[v][u] = 1;
    }

    for(int i = 1; i <= n; i++)
        f[1<<i][i] = 1;
    for(int s = 1; s < (1 << n); s++)
        for(int i = 1; i <= n; i++)
            if(s & (1 << i)) {
                for(int j = 1; j <= n; j++) {
                    if(a[i][j] && (1 << j) >= (s & -s)) {
                        if((1 << j) & s) {
                            if((1 << j) == (s & -s)) 
                                ans += f[s][i];
                        }
                        else f[s | (1 << j)][j] += f[s][i];
                    }
                }
            }

    cout << (ans - m) / 2 << endl;

    return 0;
}
2024/8/12 23:33
加载中...