Submission #1006117

#TimeUsernameProblemLanguageResultExecution timeMemory
1006117pudelosPaths (BOI18_paths)C++17
100 / 100
217 ms92816 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for(int i=a; i<=b; ++i) #define eb emplace_back #define ll long long #define V vector const int maxn=3e5+7, maxk=5; ll dp[maxn][1<<maxk]; int n, m, k; V<int> A; V<V<int>> con; int main() { cin.tie(0) -> ios_base::sync_with_stdio(0); cin >> n >> m >> k; A.resize(n+1); con.resize(n+1); FOR(i, 1, n) { cin >> A[i]; --A[i]; dp[i][1<<A[i]]=1; } int a, b; FOR(i, 1, m) { cin >> a >> b; con[a].eb(b); con[b].eb(a); } ll odp=0; FOR(m, 1, (1<<k)-1) { FOR(v, 1, n) { int gr = A[v]; if((m|(1<<gr))!=m) continue; if(__builtin_popcount(m)>=2) odp+=dp[v][m]; for(int u : con[v]) { int sgr = A[u]; if((m|(1<<sgr))==m) continue; dp[u][m|(1<<sgr)]+=dp[v][m]; } } } cout << odp << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...