/**
* Author : Vu Khac Minh
**/
#include <bits/stdc++.h>
#define ll long long
#define BIT(x,i) (((x)>>(i))&(1))
#define MASK(x) ((1ll)<<(x))
using namespace std;
const int maxn = 3e5 + 5;
const int mod = 1e9+7;
ll res, n,k,m,a[maxn],dp[maxn][MASK(5)];
vector<int> adj[maxn];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>k;
for(int i =1;i<=n;i++)
{
cin>>a[i];
a[i]--;
}
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 i = 1;i<=n;i++)
dp[i][MASK(a[i])] = 1;
for(int mask = 1;mask<MASK(k);mask++)
{
for(int u = 1;u<=n;u++)
{
for(auto v : adj[u])
if(!BIT(mask,a[v]))
{
dp[v][mask|MASK(a[v])] = ( dp[v][mask|MASK(a[v])] + dp[u][mask]);
}
if(__builtin_popcount(mask) > 1)res = (res +dp[u][mask]);
}
}
cout<<res<<'\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |