Submission #404201

#TimeUsernameProblemLanguageResultExecution timeMemory
404201rama_pangPaths (BOI18_paths)C++17
100 / 100
571 ms70708 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, M, K; cin >> N >> M >> K; vector<int> A(N); for (int i = 0; i < N; i++) { cin >> A[i]; A[i]--; } vector<vector<int>> adj(N); while (M--) { int u, v; cin >> u >> v; u--, v--; adj[u].emplace_back(v); adj[v].emplace_back(u); } vector<vector<long long>> dp(N, vector<long long>(1 << K)); for (int mask = (1 << K) - 1; mask >= 0; mask--) { for (int i = 0; i < N; i++) if ((mask >> A[i]) & 1) { dp[i][mask] += 1; } for (int i = 0; i < N; i++) if ((mask >> A[i]) & 1) { for (auto j : adj[i]) if (((mask >> A[j]) & 1) ^ 1) { dp[i][mask] += dp[j][mask | (1 << A[j])]; } } } long long ans = 0; for (int i = 0; i < N; i++) { ans += dp[i][1 << A[i]]; } cout << ans - N << '\n'; 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...