Submission #1163666

#TimeUsernameProblemLanguageResultExecution timeMemory
1163666DangKhoizzzzPaths (BOI18_paths)C++20
100 / 100
633 ms107796 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int maxn = 3e5 + 7; int n , m , k, a[maxn] , dp[maxn][(1 << 5) + 5]; vector <int> g[maxn]; void solve() { cin >> n >> m >> k; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= m; i++) { int u , v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } for(int u = 1; u <= n; u++) { a[u]--; dp[u][(1 << (a[u]))] = 1; } for(int i = 1; i < k; i++) { for(int u = 1; u <= n; u++) { for(int v: g[u]) { for(int mask = 1; mask < (1 << k); mask++) { if(__builtin_popcountll(mask) == i) { if(((mask >> a[v])&1) == 0) { dp[v][(mask | (1 << a[v]))] += dp[u][mask]; } } } } } } int ans = 0ll; for(int i = 1; i <= n; i++) { for(int mask = 1; mask < (1 << k); mask++) { ans += dp[i][mask]; } } cout << ans - n << '\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //freopen("inp.txt" , "r" , stdin); //freopen("out.txt" , "w" , stdout); solve(); return 0; } /* F: Fenwick tree + mảng hiệu -> update range -> sum C: binary search */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...