Submission #384854

#TimeUsernameProblemLanguageResultExecution timeMemory
384854ritul_kr_singhPaths (BOI18_paths)C++17
100 / 100
601 ms62360 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define sp << ' ' << #define nl << '\n' vector<vector<int>> g; signed main(){ cin.tie(0)->sync_with_stdio(0); int n, m, k, x, y; cin >> n >> m >> k; int c[n]; for(int i=0; i<n; ++i) cin >> c[i], c[i] = (1<<(c[i]-1)); g.resize(n); while(m--){ cin >> x >> y; --x, --y; g[x].push_back(y); g[y].push_back(x); } int ans = 0; int dp[n][1<<k]; for(int i=0; i<n; ++i){ fill(dp[i], dp[i]+(1<<k), 0LL); dp[i][c[i]] = 1; } for(int cnt=1; cnt<k; ++cnt){ for(int u=0; u<n; ++u) for(int v : g[u]){ for(int i=0; i<(1<<k); ++i){ if(i&c[u]) continue; int s=0; for(int j=0; j<k; ++j) if(i&(1<<j)) ++s; if(s!=cnt) continue; dp[u][c[u]|i] += dp[v][i]; ans += dp[v][i]; } } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...