记录编号 575449 评测结果 AAAAAAAAAA
题目名称 GodFly的寻宝之旅 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 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;
}