简单dfs + 注意细节
#include<bits/stdc++.h>
//#include<iostream>
//#include<algorithm>
//#include<cstdio>
//#include<string>
using namespace std;
typedef long long ll;
const int maxn = 500 + 7;
int n, m, k;
vector<int> vec[maxn];
int c[maxn];
bool vis[maxn];
bool dfs(int id) {
// cout << id << " +++ " << endl;
vis[id] = 1;
for(auto i : vec[id]) {
if(c[i] == c[id]) return false;
if(vis[i]) continue;
if(!dfs(i)) return false;
}
return true;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= m; ++i) {
int u, v; scanf("%d%d", &u, &v);
vec[u].push_back(v);
vec[v].push_back(u);
}
int q;
scanf("%d", &q);
for(int i = 1; i <= q; ++i) {
memset(vis, 0, (n+3)*sizeof(bool));
set<int> st;
for(int j = 1; j <= n; ++j) {
scanf("%d", &c[j]);
st.insert(c[j]);
}
if(st.size() != k) {
puts("No");
continue;
}
bool ok = true;
for(int j = 1; j <= n; ++j) {
if(!dfs(j)) {
puts("No");
ok = false;
break;
}
}
if(ok) puts("Yes");
}
return 0;
}