Submission #1272434

#TimeUsernameProblemLanguageResultExecution timeMemory
1272434phamminhsonPaths (BOI18_paths)C++20
100 / 100
375 ms92624 KiB
#include<bits/stdc++.h>
using namespace std;

int n, m, k;
long long int res = 0;

long long int dp[300005][32];
vector<int> Adj[300005];

int arr[300005];

int main(){
    cin >> n >> m >> k;
    for(int i = 1 ; i <= n ; i ++){
        cin >> arr[i];
        dp[i][0] = 1;
    }

    for(int i = 1 ; i <= m ; i ++){
        int u, v;
        cin >> u >> v;
        Adj[u].push_back(v);
        Adj[v].push_back(u);
    }

    for(int mask = 1; mask < (1 << k); mask ++){
        for(int i = 1 ; i <= n ; i ++){
            if((mask >> (arr[i] - 1)) & 1){
                if(__builtin_popcount(mask) == 1){
                    dp[i][mask] = 1;
                    continue;
                }
                for(int j = 0; j < Adj[i].size(); j ++){
                    int v = Adj[i][j];
                    dp[i][mask] += dp[v][mask ^ (1 << (arr[i] - 1))];
                }
                if(__builtin_popcount(mask) > 1)
                        res += dp[i][mask];
                /*for(int j = k - 1 ; j >= 0 ; j --)
                    cout << ((mask >> j) & 1);
                cout << " " << i << " " << dp[i][mask] << endl;*/
            }
        }
    }

    cout << res << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...