记录编号 |
575449 |
评测结果 |
AAAAAAAAAA |
题目名称 |
GodFly的寻宝之旅 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.952 s |
提交时间 |
2022-09-15 15:42:49 |
内存使用 |
233.72 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long x,y,n,m,id,mod=19260817;
long long G[20][20],dp[20][1<<20][2],sum[1<<20];
void ad(long long &x,long long y){
x+=y;
x%=mod;
}
int main(){
freopen("GodFly.in","r",stdin);
freopen("GodFly.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
long long x,y;
for(int i=1;i<=m;i++){
cin>>x>>y;
G[x][y]++;
G[y][x]++;
}
for(int i=0;i<(1<<n);i++){
int tmp=i,tot=0;
while(tmp){
tot++;
if(tmp&1){
sum[i]+=tot;
}
tmp>>=1;
}
}
dp[1][1][0]=1;
for(int i=1;i<(1<<n);i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
if(!G[j][k]){
continue;
}
int to=k;
if(i&(1<<(to-1))){
continue;
}
ad(dp[to][i|(1<<(to-1))][(to*sum[i]+0)&1],G[j][k]*dp[j][i][0]);
ad(dp[to][i|(1<<(to-1))][(to*sum[i]+1)&1],G[j][k]*dp[j][i][1]);
}
}
}
long long ans=0;
cin>>id;
for(int i=1;i<(1<<n);i++){
if((i&1)&&i&(1<<n-1)){
ad(ans,dp[n][i][id]);
}
}
cout<<ans<<endl;
return 0;
}