也可以把边集状压存下来,用set判重就好。 #include <bits/stdc++.h> using namespace std; const int N = 10; int G[N][N]; vector<pair<int, int>> edges; map<pair<int, int>, int> dic; int getid(int x, int y) { if (x > y) swap(x, y); assert(x < y); if (dic[{x, y}]) return dic[{x, y}]; return dic[{x, y}] = dic.size(); } long long check() { long long hash = 0; for (auto& e : edges) { int u = p[e.first], v = p[e.second]; if (G[u][v]) hash |= 1LL << getid(u, v); else return -1; } return hash; } int main() { int n, a, b; while (~scanf("%d%d%d", &n, &a, &b)) { memset(G, 0, sizeof(G)); dic.clear(); edges.clear(); for (int i = 0, u, v; i < a; i++) { scanf("%d%d", &u, &v); --u, --v; edges.emplace_back(u, v); } for (int i = 0, u, v; i < b; i++) { scanf("%d%d", &u, &v); --u, --v; G[u][v] = G[v][u] = 1; getid(u, v); } for (int i = 0; i < n; i++) p[i] = i; set<long long> s; do { int tmp = check(); if (~tmp) s.insert(tmp); } while (next_permutation(p, p + n)); int ans = s.size(); printf("%d\n", ans); } }
点赞 评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
牛客网
牛客企业服务