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.