Submission #1150299

#TimeUsernameProblemLanguageResultExecution timeMemory
1150299tntPaths (BOI18_paths)C++20
53 / 100
150 ms164168 KiB
#include <bits/stdc++.h> using namespace std; //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") #define pb push_back #define ll long long #define int long long //#define sort(all(v)) sort(v.begin(),v.end()) int mod = 1e9 + 7; const int N = 2e5 + 100; const int inf = 2e9; vector <int> g[N]; int ans; int dp[N][100]; signed main(){ //freopen("shuffle.in", "r", stdin); //freopen("shuffle.out", "w", stdout); int n,m,k; cin >> n >> m >> k; int a[n + 1]; for(int i = 1; i <= n; i++){ cin >> a[i]; a[i]--; dp[i][(1 << a[i])] = 1; } for(int i = 1; i <= m; i++){ int u,v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } for(int mask = 1; mask < (1 << k); mask++){ for(int i = 1; i <= n; i++){ if((mask >> a[i] & 1) != 1) continue; for(int to : g[i]){ if((mask >> a[to] & 1) != 1){ dp[to][mask + (1 << a[to])] += dp[i][mask]; } } } } for(int mask = 1; mask < (1 << k); mask++){ for(int i = 1; i <= n; i++){ if(__builtin_popcount(mask) != 1)ans += dp[i][mask]; } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...