trafik

bruh

May 1st, 2022
1,392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 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 ll mod = 1e9 + 7;
  16. using namespace std;
  17.  
  18.  
  19. ll binpow(ll a, ll n) { // a^n
  20.     if (n == 0) return 1;
  21.     if (n % 2 == 1)
  22.         return (binpow(a, n - 1ll) * a) % mod;
  23.     else {
  24.         ll b = binpow(a, n / 2) % mod;
  25.         return (b * b) % mod;
  26.     }
  27. }
  28.  
  29. vector<bool> dp((1ll << 23), false);
  30.  
  31. ll f(ll mask) {
  32.     ll ans = 0;
  33.     ll s = mask;
  34.     while (s) {
  35.         ans = (ans + dp[s]) % mod;
  36.         s = (s - 1) & mask;
  37.     }
  38.     ans = (ans + 1) % mod; // dp[0]
  39.     return ans;
  40. }
  41.  
  42. ll fm[1ll << 23];
  43.  
  44. void solve() {
  45.     ll n, m;
  46.     cin >> n >> m;
  47.     ll gmask[n];
  48.     for (auto& el : gmask)
  49.         el = 0;
  50.     for (int i = 0; i < m; ++i) {
  51.         int v, u; cin >> v >> u;
  52.         --u; --v;
  53.         gmask[v] ^= (1ll << u);
  54.         gmask[u] ^= (1ll << v);
  55.     }
  56.  
  57.     dp[0] = true;
  58.     for (int i = 0; i < n; ++i) {
  59.         dp[1 << i] = true;
  60.     }
  61.     for (ll mask = 0; mask < (1ll << n); ++mask) {
  62.         if (!dp[mask]) continue;
  63.         for (int i = 0; i < n; ++i) {
  64.             if (!((mask >> i) & 1) && (mask & gmask[i]) == 0) {
  65.                 dp[mask ^ (1ll << i)] = true;
  66.             }
  67.         }
  68.     }
  69.  
  70.     for (ll A = 0; A < (1ll << n); ++A) {
  71.         fm[A] = f(A);
  72.     }
  73.  
  74.     ll res = 0ll;
  75.     for (ll A = 0; A < (1ll << n); ++A) {
  76.         res = (res + (fm[A] * binpow(2, A))) % mod;
  77.     }
  78.     cout << res;
  79. }
  80.  
  81. int main() {
  82.     ios_base::sync_with_stdio(false);
  83.     cin.tie(nullptr);
  84.     cout.tie(nullptr);
  85.  
  86.     solve();
  87.  
  88.     return 0;
  89. }
  90.  
Advertisement
Add Comment
Please, Sign In to add comment