Submission #1213442

#TimeUsernameProblemLanguageResultExecution timeMemory
1213442minhpkPaths (BOI18_paths)C++20
100 / 100
260 ms240220 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...