CSES Solutions
#1690Graph Algorithms

Hamiltonian Flights

View on CSES

Solution

1690-Hamiltonian_Flights.cpp
1#include<bits/stdc++.h>
2using namespace std;
3#define int long long
4constexpr int M=1e9+7;
5signed main(){
6  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
7  int n,m; cin>>n>>m;
8  vector<int> p[n];
9  for(int i=0;i<m;++i){
10    int u,v; cin>>u>>v;
11    p[--v].emplace_back(--u);
12  }
13  int dp[1<<n][n]; memset(dp,0,sizeof dp);
14  dp[1][0]=1;
15  for(int msk=0;msk<(1<<n);++msk){
16    if((msk>>(n-1)&1)&&msk!=((1<<n)-1)) continue;
17    for(int i=1;i<n;++i) if(msk>>i&1){
18      int p_msk=msk^(1<<i);
19      for(int&j:p[i]){
20        dp[msk][i]=(dp[msk][i]+dp[p_msk][j])%M;
21      }
22    }
23  }
24  cout<<dp[(1<<n)-1][n-1]<<'\n';
25  return 0;
26}

Editorial not yet generated for this problem. Run the editorial generation script to add hints and detailed explanations.