Submission #595422

#TimeUsernameProblemLanguageResultExecution timeMemory
595422UncoolAnonPaths (BOI18_paths)C++14
100 / 100
407 ms64612 KiB
//18:08
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(nullptr); 
	int n,m,k; 
	cin>>n>>m>>k; 
	vector<int> adj[n+1],color(n+1); 
	for(int i=1;i<=n;i++) cin>>color[i],color[i]--; 
	while(m--){
		int a,b; 
		cin>>a>>b; 
		adj[a].push_back(b); 
		adj[b].push_back(a); 
	}
	int B=(1LL<<k); 
	vector<vector<int>> dp(B,vector<int>(n+1,-1)); 
	for(auto&x:dp) for(int&y:x) y=-1; 
	function<int(int,int)> dfs=[&](int mask,int a){
		if(dp[mask][a]!=-1) return dp[mask][a];
		int answer=1; 
		for(int&x:adj[a]){
			if(((1LL<<color[x])&mask)==0){
				answer+=dfs((1LL<<color[x])|mask,x); 
			}
		}
		return dp[mask][a]=answer; 
	}; 
	int answer=0; 
	for(int i=1;i<=n;i++) answer+=dfs((1LL<<color[i]),i); 
	cout<<answer-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...