Submission #522512

#TimeUsernameProblemLanguageResultExecution timeMemory
522512Leonardo_PaesPaths (BOI18_paths)C++17
100 / 100
323 ms92684 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 3e5+10, maxl = 1<<5; int c[maxn]; vector<int> grafo[maxn]; long long dp[maxn][maxl]; long long solve(int u, int mask){ if(dp[u][mask] != -1) return dp[u][mask]; long long tot = 1; for(int v : grafo[u]) if(!(mask&c[v])) tot += solve(v, mask^c[v]); return dp[u][mask] = tot; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int n, m, k; cin >> n >> m >> k; for(int i=1; i<=n; i++){ cin >> c[i]; c[i] = (1<<(c[i]-1)); } for(int i=1; i<=m; i++){ int u, v; cin >> u >> v; grafo[u].push_back(v); grafo[v].push_back(u); } long long ans = 0; memset(dp, -1, sizeof dp); for(int i=1; i<=n; i++) ans += solve(i, c[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...