Submission #651095

#TimeUsernameProblemLanguageResultExecution timeMemory
651095bachhoangxuanPaths (BOI18_paths)C++17
100 / 100
399 ms112068 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 300005
int n,m,k,dp[maxn][(1<<5)+5],c[maxn];
vector<int> ms[10],edge[maxn];
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin >> n >> m >> k;
    for(int i=1;i<=n;i++){cin >> c[i];c[i]--;dp[i][(1<<c[i])]=1;}
    for(int i=1;i<=m;i++){
        int u,v;cin >> u >> v;
        edge[u].push_back(v);
        edge[v].push_back(u);
    }
    for(int mask=0;mask<(1<<k);mask++){
        int cnt=0;
        for(int j=0;j<k;j++) cnt+=(mask>>j)&1;
        ms[cnt].push_back(mask);
    }
    int ans=0;
    for(int i=2;i<=k;i++){
        for(int mask:ms[i]){
            for(int j=1;j<=n;j++){
                if((mask^(1<<c[j]))==0) continue;
                for(int v:edge[j]) dp[j][mask]+=dp[v][mask^(1<<c[j])];
                ans+=dp[j][mask];
            }
        }
    }
    cout << ans << 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...