#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
vector <int > z[1000005];
int f[400005][1<<6];
int type[4000005];
int dp(int i,int j){
int k=__builtin_popcount(j);
if (f[i][j]!=-1){
return f[i][j];
}
f[i][j]=(k>1);
for (auto p:z[i]){
if (!( (j >> type[p]) & 1 )){
f[i][j]+=dp(p, j|(1<<type[p]) );
}
}
return f[i][j];
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> b >> c;
for (int i=1;i<=a;i++){
cin >> type[i];
type[i]--;
}
for (int i=1;i<=b;i++){
int x,y;
cin >> x >> y;
z[x].push_back(y);
z[y].push_back(x);
}
for (int i=1;i<=a;i++){
z[0].push_back(i);
}
memset(f,-1,sizeof f);
cout << dp(0,0) << "\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... |