trafik

Untitled

May 7th, 2022
928
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 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.  
  19. /*void solve() {
  20.     int n; cin >> n;
  21.     vector<int> a(n), b(n);
  22.     for (int i = 0; i < n; ++i) {
  23.         cin >> a[i];
  24.         b[i] = abs(a[i]);
  25.     }
  26.     int i = 0, d;
  27.     for (; i < (len(b) - 1) && b[i] >= b[i + 1]; ++i);
  28.     d = i;
  29.     for (; i < (len(b) - 1) && b[i] <= b[i + 1]; ++i);
  30.     if (i != len(b) - 1) {
  31.         cout << "NO\n";
  32.         return;
  33.     }
  34.     int cntrminus = 0, cntrplus = 0, cntlminus = 0, cntlplus = 0;
  35.     for (int i = len(a) - 2; i >= 0 && b[i] <= b[i + 1]; --i) {
  36.         if (a[i] > 0) cntrplus++;
  37.         else cntrminus++;
  38.     }
  39.     for (int i = 0; i < len(a) - 2 && b[i] >= b[i + 1]; ++i) {
  40.         if (a[i] > 0) cntlplus++;
  41.         else cntlminus++;
  42.     }
  43.     if ((cntlplus == cntrminus))
  44.         cout << "YES\n";
  45.     else cout << "NO\n";
  46.    
  47.  
  48. }*/
  49.  
  50. void solve1() {
  51.     int n;
  52.     cin >> n;
  53.     vector<ll> p(1 << n);
  54.     for (int i = 0; i < (1 << n); ++i)
  55.         cin >> p[i];
  56.  
  57.     for (ll i = 1; i < (1ll << n); ++i) {
  58.         ll s = i;
  59.         s = (s - 1) & i;
  60.         while (s > 0) {
  61.             //p[i] += a[s]; s подмаска i
  62.             p[i] -= p[s];
  63.             s = (s - 1) & i;
  64.         }
  65.         //a[i] += p[0];
  66.         p[i] -= p[0];
  67.     }
  68.     for (auto el : p)
  69.         cout << el << " ";
  70.    
  71. }
  72.  
  73. void solve() {
  74.     int n, m;
  75.     cin >> n >> m;
  76.     vector<int> gmask(n, 0);
  77.     for (int i = 0; i < m; ++i) {
  78.         int u, v;
  79.         cin >> u >> v;
  80.         --u; --v;
  81.         gmask[u] += 1 << v;
  82.         gmask[v] += 1 << u;
  83.     }
  84.  
  85.     vector<bool> dp(1 << n, false);
  86.     dp[0] = 1;
  87.     for (int i = 0; i < n; ++i) {
  88.         dp[1 << i] = 1;
  89.     }
  90.     for (int mask = 0; mask < (1 << n); ++mask) {
  91.         if (!dp[mask]) continue;
  92.         for (int k = 0; k < n; ++k) {
  93.             if ((mask & gmask[k] == 0) && ((mask >> k) & 1 == 0))
  94.                 dp[mask ^ (1 << k)] = 1;
  95.         }
  96.     }
  97.  
  98.     vector<int> fm(1 << n), binpow(1 << n);
  99.     for (int mask = 0; mask < (1 << n); ++mask) {
  100.         fm[mask] = (int)dp[mask];
  101.     }
  102.  
  103.     for (int k = 0; k < n; ++k) {
  104.         for (int mask = 0; mask < (1 << n); ++mask) {
  105.             if ((mask >> k) & 1)
  106.                 fm[mask] = (fm[mask] + fm[mask ^ (1 << k)]) % mod;
  107.         }
  108.     }
  109.  
  110.     binpow[0] = 1;
  111.     for (int i = 1; i < (1 << n); ++i) {
  112.         binpow[i] = (binpow[i - 1] * 2) % mod;
  113.     }
  114.    
  115.     for (auto el : fm)
  116.         cout << el << " ";
  117.  
  118.  
  119.     /*vector<int> binpow(1 << n, 0);
  120.     binpow[0] = 1;
  121.     for (int i = 1; i < (1 << 23); ++i) {
  122.         binpow[i] = (binpow[i - 1] * 2) % mod;
  123.     }*/
  124.    
  125. }
  126.  
  127. int main() {
  128.     ios::sync_with_stdio(false);
  129.     cin.tie(nullptr);
  130.     cout.tie(nullptr);
  131.  
  132.     solve();
  133.    
  134.  
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment