Submission #1297593

#TimeUsernameProblemLanguageResultExecution timeMemory
1297593Hamed_GhaffariPaths (BOI18_paths)C++20
100 / 100
259 ms92764 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MXN = 3e5+5;

int n, m, k, a[MXN];
vector<int> g[MXN];
ll dp[MXN][1<<5], ans;

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> m >> k;
    for(int i=1; i<=n; i++) cin >> a[i], a[i]--, dp[i][1<<a[i]] = 1;
    for(int i=1,u,v; i<=m; i++) {
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for(int msk=0; msk<(1<<k); msk++)
        for(int v=1; v<=n; v++) {
            ans += dp[v][msk];
            for(int u : g[v])
                if(!(msk>>a[u]&1))
                    dp[u][msk^(1<<a[u])] += dp[v][msk];
        }
    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...