Submission #1268685

#TimeUsernameProblemLanguageResultExecution timeMemory
1268685pinbuPaths (BOI18_paths)C++20
100 / 100
222 ms92736 KiB
#include <iostream> #include <vector> using namespace std; const int N = 300005; int n, m, k, c[N]; vector<int> adj[N]; int64_t dp[N][1 << 5]; signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> k; for (int i = 1; i <= n; i++) cin >> c[i], c[i]--, dp[i][1 << c[i]] = 1; while (m--) { int u, v; cin >> u >> v; adj[u].emplace_back(v); adj[v].emplace_back(u); } for (int ma = 1; ma < (1 << k); ma++) { for (int u = 1; u <= n; u++) { if ((ma >> c[u]) & 1) { for (int v: adj[u]) { if ((ma >> c[v]) & 1) { dp[v][ma] += dp[u][ma ^ (1 << c[v])]; } } } } } int64_t ans = 0; for (int u = 1; u <= n; u++) { for (int ma = 3; ma < (1 << k); ma++) { if (__builtin_popcount(ma) < 2) continue; ans += dp[u][ma]; } } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...