Submission #1168497

#TimeUsernameProblemLanguageResultExecution timeMemory
1168497ZeroCoolPaths (BOI18_paths)C++20
100 / 100
366 ms57948 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ll long long #define ld long double #define all(v) v.begin(),v.end() #define ar array const int M = 1e6; const int N = 4e5 + 20; const int LOG = 61; const int INF = 1e18; const int MOD = 1e9 + 7; const ld EPS = 1e-9; inline void mm(int &x){x = (x % MOD + MOD) % MOD;} inline void chmin(int &x, int y){x = min(x, y);} inline void chmax(int &x, int y){x = max(x, y);} #pragma GCC optimize("unroll-loops,O3") void orz(){ int n, m, k; cin>>n>>m>>k; int dp[n][1 << k]; memset(dp, 0, sizeof dp); int A[n]; for(int i = 0;i < n;i++){ cin>>A[i]; --A[i]; dp[i][1 << A[i]] = 1; } vector<int> g[n]; while(m--){ int a, b; cin>>a>>b; --a, --b; g[a].push_back(b); g[b].push_back(a); } for(int msk = 0;msk < (1 << k);msk++){ for(int x = 0;x < n;x++){ for(auto u: g[x]){ if(msk & (1 << A[u]))continue; dp[u][msk ^ (1 << A[u])] += dp[x][msk]; } } } int ans = 0; for(int i = 0;i < n;i++){ for(int j = 0;j < (1 << k);j++)ans += dp[i][j]; } cout<<ans - n; } signed main(){ios_base::sync_with_stdio(false);cin.tie(0); int t = 1; //cin>>t; while(t--)orz(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...