제출 #984457

#제출 시각아이디문제언어결과실행 시간메모리
984457Ahmed57Paths (BOI18_paths)C++17
100 / 100
455 ms100540 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n,m,k; vector<int> adj[300001]; int dp[300001][(1<<5)],arr[300001]; int solve(int i,int mask){ if(dp[i][mask]!=-1)return dp[i][mask]; int c1 = 1; for(auto j:adj[i]){ if(mask&(1<<arr[j]))continue; c1+=solve(j,mask^(1<<arr[j])); }return dp[i][mask] = c1; } signed main(){ cin>>n>>m>>k; for(int i = 1;i<=n;i++){ cin>>arr[i]; arr[i]--; } for(int i = 1;i<=m;i++){ int a,b;cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } long long all = 0; memset(dp,-1,sizeof dp); for(int i = 1;i<=n;i++)all+=solve(i,(1<<arr[i])); cout<<all-n<<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...