Submission #927218

#TimeUsernameProblemLanguageResultExecution timeMemory
927218vjudge1Paths (BOI18_paths)C++17
20 / 100
375 ms79644 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(a) a.begin(),a.end()
#define pb push_back
#define vt vector
#define endl '\n'
typedef long long ll;

const ll mod=1e9+7;
const ll inf=1e9+7;
const int N=5e5+4;

int n,m,k,a[N],used[N];
ll res=0;
ll dp[(1<<6)][N];
vt<int>g[N];

void solve(){
	cin>>n>>m>>k;
	for(int i=1; i<=n; ++i) {
		cin>>a[i];
		a[i]--;
		dp[(1<<a[i])][i]=1;
	}
	for(int i=1; i<=m; ++i){
		int u,v;
		cin>>u>>v;
		g[u].pb(v);
		g[v].pb(u);
	}
	for(int mask=1; mask<(1<<k); ++mask){
		for(int v=1; v<=n; ++v){
			for(int to:g[v]){
				if(a[to]!=a[v] && ((mask>>a[to])&1)==0) dp[mask|(1<<a[to])][v]+=dp[mask][v];
			}
		}
	}
	ll ans=0;
	for(int mask=1; mask<(1<<k); ++mask){
	for(int v=1; v<=n; ++v){
		ans+=dp[mask][v];
	}
	}
	cout<<ans-n<<endl;
}
			
int main(){
	int tt=1;
	//cin>>tt;
	while(tt--) {
		solve();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...