Submission #696744

#TimeUsernameProblemLanguageResultExecution timeMemory
696744vjudge1Amusement Park (CEOI19_amusementpark)C++14
100 / 100
2700 ms1800 KiB
#include<bits/stdc++.h>
#define ll long long
#define lll __int128
#define db double
#define ld long double
#define pii pair<int,int>
#define fi first
#define se second
#define vi vector<int>
using namespace std;
namespace IO
{
	const int SZ=1<<20;
	char gchar()
	{
	    static char buf[SZ];
	    static int i=SZ;
	    if(i==SZ)i=0,fread(buf,1,SZ,stdin);
	    return buf[i++];
	}
	void pchar(char c)
	{
	    static char buf[SZ];
	    static int i=0;
	    if(c)buf[i++]=c;
	    if(!c||i==SZ)fwrite(buf,1,i,stdout),i=0;
	}
	void pstr(string s,char end='\n')
	{
		for(char c:s)pchar(c);
		pchar(end);
	}
	template<typename T>void read(T &x)
	{
	    x=0;int f=1;
	    static char c;
	    while((c=gchar())>'9'||c<'0')if(c=='-')f=-1;
	    x=c-'0';
	    while((c=gchar())>='0'&&c<='9')
			x=(x<<1)+(x<<3)+(c^48);
		x*=f;
	}
	template<typename T,typename ...Args>void read(T &x,Args&...args){read(x),read(args...);}
	template<typename T>void i_write(T x)
	{
	    if(x>9)i_write(x/10);
	    pchar(x%10+'0');
	}
	template<typename T>void write(T x,char end='\n')
	{
	    if(x<0)pchar('-'),x=-x;
	    if(x>9)i_write(x/10);
	    pchar(x%10+'0');
	    pchar(end);
	}
}
using IO::read;
using IO::write;
const int N=400,mod=998244353,inv2=(mod+1)>>1;
int n,m,x[N],y[N],f[1<<18];
bool flg[1<<18];
int main()
{
	read(n,m);
	for(int i=1;i<=m;i++)read(x[i],y[i]);
	for(int msk=0;msk<(1<<n);msk++)
		for(int i=1;i<=m;i++)
			if((msk&(1<<x[i]-1))&&(msk&(1<<y[i]-1)))flg[msk]=1;
	f[0]=1;
	for(int msk=1;msk<(1<<n);msk++)
		for(int s=msk;s;s=msk&(s-1))
			if(!flg[s])f[msk]=(0ll+f[msk]+(__builtin_popcount(s)&1?1:-1)*f[msk^s]+mod)%mod;
	printf("%lld",1ll*m*inv2%mod*f[(1<<n)-1]%mod);
	IO::pchar(0);
	return 0;
}

Compilation message (stderr)

amusementpark.cpp: In function 'int main()':
amusementpark.cpp:68:20: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   68 |    if((msk&(1<<x[i]-1))&&(msk&(1<<y[i]-1)))flg[msk]=1;
      |                ~~~~^~
amusementpark.cpp:68:39: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   68 |    if((msk&(1<<x[i]-1))&&(msk&(1<<y[i]-1)))flg[msk]=1;
      |                                   ~~~~^~
amusementpark.cpp: In function 'char IO::gchar()':
amusementpark.cpp:18:24: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |      if(i==SZ)i=0,fread(buf,1,SZ,stdin);
      |                   ~~~~~^~~~~~~~~~~~~~~~
#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...