#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <cstring>
using namespace std;
vector<vector<int> > v(505);
int color[505];
int vis[505];
int flag;
void dfs(int node,int col){
if(flag) return;
for(int i = 0; i < v[node].size(); i++){
if(color[node] == color[v[node][i]]){
flag = 1;
return;
}
if(!vis[v[node][i]]){
vis[v[node][i]] = 1;
dfs(v[node][i],color[v[node][i]]);
}
}
}
int main(void){
int n,e,k;
cin>>n>>e>>k;
for(int i = 0; i < e; i++){
int a,b;
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
int q;
cin>>q;
for(int i = 1; i <= q; i++){
set<int> st;
for(int j = 1; j <= n; j++){
cin>>color[j];
st.insert(color[j]);
}
if(st.size() != k){
printf("No\n");
}
else{
flag = 0;
memset(vis,0,sizeof(vis));
for(int j = 1; j <= n; j++){
if(flag){
break;
}
if(!vis[j]){
vis[j] = 1;
dfs(j,color[j]);
}
}
if(flag){
printf("No\n");
}
else{
printf("Yes\n");
}
}
}
}
L2-023. 图着色问题
最新推荐文章于 2022-03-19 16:52:10 发布