Submission #547603

#TimeUsernameProblemLanguageResultExecution timeMemory
547603JomnoiPaths (BOI18_paths)C++17
100 / 100
200 ms83560 KiB
#include <bits/stdc++.h> #define DEBUG 0 using namespace std; const int MAX_N = 3e5 + 10; const int MAX_K = 5; int a[MAX_N], b[MAX_N], c[MAX_N]; long long dp[MAX_N][1<<MAX_K]; int main() { cin.tie(0)->sync_with_stdio(0); int N, M, K; cin >> N >> M >> K; for(int i = 1; i <= N; i++) { cin >> c[i]; c[i]--; dp[i][1<<c[i]] = 1; } for(int i = 1; i <= M; i++) { cin >> a[i] >> b[i]; } long long ans = 0; for(int mask = 1; mask < (1<<K); mask++) { if(__builtin_popcount(mask) == 1) { continue; } for(int i = 1; i <= M; i++) { if(mask & (1<<c[a[i]])) { dp[a[i]][mask] += dp[b[i]][mask ^ (1<<c[a[i]])]; } if(mask & (1<<c[b[i]])) { dp[b[i]][mask] += dp[a[i]][mask ^ (1<<c[b[i]])]; } } for(int i = 1; i <= N; i++) { ans += dp[i][mask]; } } 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...