Submission #866411

#TimeUsernameProblemLanguageResultExecution timeMemory
866411The_SamuraiPaths (BOI18_paths)C++17
100 / 100
347 ms61264 KiB
//#pragma GCC optimize("O3", "unroll-loops") //#pragma GCC target("avx2", "popcnt") #include "bits/stdc++.h" using namespace std; using ll = long long; const ll inf = 1e18; vector<int> col_v; vector<vector<int>> g; ll ans; int main() { srand(time(0)); cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int n, m, k; cin >> n >> m >> k; col_v.assign(n + 1, 0); g.assign(n + 1, {}); for (int i = 1; i <= n; i++) cin >> col_v[i]; for (int i = 1; i <= n; i++) col_v[i] = 1 << (col_v[i] - 1); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; g[u].emplace_back(v); g[v].emplace_back(u); } vector dp(1 << k, vector(n + 1, 0ll)); for (int i = 1; i <= n; i++) dp[col_v[i]][i] = 1; for (int bt = 1; bt < (1 << k); bt++) { for (int u = 1; u <= n; u++) { for (int v: g[u]) { if (bt & col_v[v]) continue; dp[bt | col_v[v]][v] += dp[bt][u]; } } if (__builtin_popcount(bt) == 1) continue; for (int u = 1; u <= n; u++) ans += dp[bt][u]; } 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...