Submission #718015

#TimeUsernameProblemLanguageResultExecution timeMemory
718015amirhoseinfar1385Paths (BOI18_paths)C++17
100 / 100
679 ms24388 KiB
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
vector<int>all,val,unnow;
vector<vector<int>>adj,allv;
long long res=0;

void solve(int mina){
	if(mina>k){
		if((int)unnow.size()<=1){
			return ;
		}
		do{
			for(auto x:unnow){
				for(auto y:allv[x]){
					val[y]=0;
				}
			}
			for(int i=0;i<(int)unnow.size()-1;i++){
				for(auto x:allv[unnow[i]]){
					if(i==0){
						val[x]=1;
					}
					for(auto y:adj[x]){
						if(all[y]==unnow[i+1]){
							val[y]+=val[x];
						}
					}
				}
			}
			for(auto x:allv[unnow.back()]){
				res+=val[x];
			}
		}while(next_permutation(unnow.begin(),unnow.end()));
		return ;
	}
	solve(mina+1);
	unnow.push_back(mina);
	solve(mina+1);
	unnow.pop_back();
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	val.resize(n+1);
	all.resize(n+1);
	adj.resize(n+1);
	allv.resize(k+1);
	for(int i=1;i<=n;i++){
		cin>>all[i];
		allv[all[i]].push_back(i);
	}
	for(int i=0;i<m;i++){
		int u,v;
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	solve(1);
	cout<<res<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...