Advertisement
trafik

bebra

May 2nd, 2022
1,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. #include <string>
  5. #include <map>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <set>
  9. #define ll long long
  10. #define len(v) (int)v.size()
  11. #define all(v) v.begin(), v.end()
  12. const ll maxn = 2e5 + 10;
  13. const int logn = 20;
  14. const ll inf = 1e18;
  15. const int mod = 1e9 + 7;
  16. using namespace std;
  17.  
  18. vector<bool> dp((1 << 23), false);
  19.  
  20. int f(int mask) {
  21.     int ans = 0;
  22.     int s = mask;
  23.     while (s) {
  24.         ans += dp[s];
  25.         ans = ((ans % mod) + mod) % mod;
  26.         s = (s - 1) & mask;
  27.     }
  28.     ans = (ans + 1) % mod; // dp[0]
  29.     return ans;
  30. }
  31.  
  32. int fm2[1 << 23];
  33. int bin_pow2[1 << 23];
  34.  
  35. void solve() {
  36.     int n, m;
  37.     cin >> n >> m;
  38.     vector<ll> gmask(n, 0);
  39.     for (int i = 0; i < m; ++i) {
  40.         int v, u; cin >> v >> u;
  41.         --u; --v;
  42.         gmask[v] ^= (1 << u);
  43.         gmask[u] ^= (1 << v);
  44.     }
  45.  
  46.     dp[0] = true;
  47.     for (int i = 0; i < n; ++i) {
  48.         dp[1 << i] = true;
  49.     }
  50.     for (int mask = 0; mask < (1 << n); ++mask) {
  51.         if (!dp[mask]) continue;
  52.         for (int i = 0; i < n; ++i) {
  53.             if (!((mask >> i) & 1) && (mask & gmask[i]) == 0) {
  54.                 dp[mask ^ (1 << i)] = true;
  55.             }
  56.         }
  57.     }
  58.  
  59.     for (int A = 0; A < (1 << n); ++A) {
  60.         fm2[A] = f(A) % mod;
  61.     }
  62.  
  63.     bin_pow2[0] = 1;
  64.     for (int i = 1; i < (1 << 23); ++i) {
  65.         bin_pow2[i] = (bin_pow2[i - 1] * 2) % mod;
  66.     }
  67.  
  68.     int res2 = 0;
  69.     for (int A = 0; A < (1 << n); ++A) {
  70.         res2 = ((ll)res2 + ((ll)fm2[A] * (ll)bin_pow2[A]) % mod) % mod;
  71.     }
  72.     cout << res2;
  73.  
  74. }
  75.  
  76. signed main() {
  77.     ios::sync_with_stdio(false);
  78.     cin.tie(nullptr);
  79.     cout.tie(nullptr);
  80.  
  81.     solve();
  82.  
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement