Submission #952855

#TimeUsernameProblemLanguageResultExecution timeMemory
952855koukirocksPaths (BOI18_paths)C++17
23 / 100
1 ms460 KiB
#include <bits/stdc++.h>
#define speed ios_base::sync_with_stdio(0); cin.tie(0)
#define all(x) (x).begin(),(x).end()
#define F first
#define S second
 
namespace{using namespace std;}
typedef long long ll;
typedef double db;
typedef long double ldb;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
 
const ll MAX=1e2+10+10,P=1e9+7;
const ll INF=0x3f3f3f3f,oo=0x3f3f3f3f3f3f3f3f;

int n,m,k;
int clr[MAX];
vector<int> G[MAX];

ll dfs(int v,vector<bool>& vis,vector<bool>& has) {
//	cout<<v<<"\n";
	vis[v]=true;
	has[clr[v]]=true;
	ll ans=0;
	for (int i:G[v]) {
		if (vis[i]) continue;
		if (has[clr[i]]) continue;
		ans+=dfs(i,vis,has);
	}
	vis[v]=false;
	has[clr[v]]=false;
	return ans+1;
}

int main() {
	speed;
	cin>>n>>m>>k;
	for (int i=1;i<=n;i++) {
		cin>>clr[i];
	}
	for (int i=0;i<m;i++) {
		int a,b;
		cin>>a>>b;
		G[a].push_back(b);
		G[b].push_back(a);
	}
	ll ans=0;
	for (int i=1;i<=n;i++) {
		vector<bool> has(k+1,0);
		vector<bool> vis(n+1,0);
		ans+=dfs(i,vis,has);
//		cout<<"\n";
	}
	cout<<ans-n<<"\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...