tepyotin2

Hamiltonian Flight

Jul 4th, 2025
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int dp[1 << 21][21];
  6. bool visited[1 << 21][21];
  7. vector<int> adj[21];
  8.  
  9. int main() {
  10.     ios_base::sync_with_stdio(0), cin.tie(0);
  11.  
  12.     int n, m;
  13.     cin >> n >> m;
  14.  
  15.     for (int i = 0; i < m; i++) {
  16.         int a, b;
  17.         cin >> a >> b; // 1 - n
  18.         adj[a - 1].push_back(b - 1); // 0 - n-1
  19.     }
  20.  
  21.     queue<pair<int, int>> q;
  22.  
  23.     dp[1][0] = 1;
  24.     q.push({1, 0});
  25.     visited[1][0] = true;
  26.  
  27.     while (!q.empty()) {
  28.         int mask = q.front().first, u = q.front().second;
  29.         q.pop();
  30.  
  31.         for (int v: adj[u]) {
  32.             if (!(mask & (1 << v))) {
  33.                 dp[mask ^ (1 << v)][v] += dp[mask][u];
  34.                 dp[mask ^ (1 << v)][v] %= int(1e9) + 7;
  35.                 if (!visited[mask ^ (1 << v)][v]) {
  36.                     visited[mask ^ (1 << v)][v] = true;
  37.                     q.push({mask ^ (1 << v), v});
  38.                 }
  39.             }
  40.         }
  41.     }
  42.  
  43.     cout << dp[(1 << n) - 1][n - 1] << '\n';
  44.  
  45.     return 0;
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment