Submission #1222635

#TimeUsernameProblemLanguageResultExecution timeMemory
1222635sam230609Amusement Park (CEOI19_amusementpark)C++20
100 / 100
1925 ms8664 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353,N=18;
ll a[N],s[1<<N],p[1<<N],r[1<<N],d[1<<N],f[1<<N];
int main() {
	ll n,m; cin >>n>>m; s[0]=1; f[0]=1;
	for(ll i=1;i<=m;i++){
		ll u,v; cin >>u>>v;
		u--; v--; a[u]|=(1<<v); a[v]|=(1<<u);
	}for(ll i=0;i<n;i++) d[1<<i]=i;
	for(ll i=0;i<(1<<n);i++){
		p[i]=p[i>>1]+(i&1); r[i]=(p[i]%2)*2-1;
	}for(ll i=1;i<(1<<n);i++){
		if(s[i&(i-1)] && (a[d[i&(-i)]] & (i&(i-1)))==0) s[i]=1;
	}for(ll i=1;i<(1<<n);i++){
		for(int j=i;j;j=(j-1)&i){
			if(s[j]) f[i]=(f[i]+r[j]*f[i^j])%mod;
		}
	}f[(1<<n)-1]=(f[(1<<n)-1]+mod)%mod;
	cout <<f[(1<<n)-1]*m%mod*((mod+1)/2)%mod;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...