Submission #858520

#TimeUsernameProblemLanguageResultExecution timeMemory
858520serifefedartarPaths (BOI18_paths)C++17
23 / 100
3081 ms7072 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 998244353; const ll LOGN = 18; const ll INF = 1e15; const ll MAXN = 3e5 + 5; vector<vector<int>> graph; int t[MAXN]; ll ans = 0; void dfs(int node, int mask_now, int target) { if (mask_now == target) ans++; for (auto u : graph[node]) { if ((1<<t[u]) & mask_now) continue; if ((1<<t[u]) & target) dfs(u, mask_now | (1<<t[u]), target); } } int main() { fast int N, M, K, a, b; cin >> N >> M >> K; graph = vector<vector<int>>(N+1, vector<int>()); for (int i = 1; i <= N; i++) cin >> t[i], t[i]--; for (int i = 0; i < M; i++) { cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } for (int i = 0; i < (1<<K); i++) { for (int node = 1; node <= N; node++) { if ((1<<t[node]) & i) dfs(node, 1<<t[node], i); } } cout << ans - N << "\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...