Submission #199998

#TimeUsernameProblemLanguageResultExecution timeMemory
199998davitmargAmusement Park (CEOI19_amusementpark)C++17
63 / 100
3055 ms4284 KiB
/*DavitMarg*/ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <set> #include <queue> #include <iomanip> #include <stack> #include <cassert> #include <iterator> #include <bitset> #include <fstream> #define mod 998244353ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(),v.end() using namespace std; LL binpow(LL a,int n) { if(n==0) return 1; if(n%2==0) return binpow(a*a%mod,n/2); return a*binpow(a,n-1)%mod; } bool inMask(int a,int mask) { return (bool)((1<<a)&mask); } int n,m; int ans[(1<<18)+10],cnt[(1<<18)+10]; vector<pair<int,int>> p; vector<int> g[20]; bool isEdge[(1<<18)+10]; int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int a,b; cin>>a>>b; a--; b--; g[a].PB(b); g[b].PB(a); p.PB(MP(a,b)); } //for(int i=0;i<n;i++) // ans[(1<<i)]=1; for(int mask=0;mask<(1<<n);mask++) { for(int i=0;i<n;i++) { if(((1<<i)&mask)==0) continue; cnt[mask]++; for(int j=0;j<g[i].size();j++) isEdge[mask]|=inMask(g[i][j],mask); } //cout<<"cnt["<<mask<<"]="<<cnt[mask]<<endl; } ans[0]=1; for(int mask=1;mask<(1<<n);mask++) { int s=mask; vector<int> S; while(s>0) { S.PB(s); s=(s-1)&mask; } while(!S.empty()) { s=S.back(); S.pop_back(); if(isEdge[s]) continue; //cout<<"cnt["<<(mask^s)<<"]="<<cnt[mask^s]<<endl; //cout<<"!ns["<<(mask^s)<<"]="<<ans[mask^s]<<endl; if(cnt[s]%2==1) ans[mask]+=ans[mask^s]; else ans[mask]+=mod-ans[mask^s]; ans[mask]%=mod; } //cout<<"ans["<<mask<<"]="<<ans[mask]<<endl; } LL answ=ans[(1<<n)-1]; answ*=(LL)m; answ%=mod; answ*=binpow(2,mod-2); answ%=mod; cout<<answ<<endl; return 0; } /* 3 1 1 2 */

Compilation message (stderr)

amusementpark.cpp: In function 'int main()':
amusementpark.cpp:67:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j=0;j<g[i].size();j++)
                ~^~~~~~~~~~~~
#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...