ZHUANZI点击打开链接
#include<iostream>
#include<cstring>
#include<set>
using namespace std;
int v,e,k;
int map[501][501];
int color[501];
bool flag=true;
int vis[501];
void dfs(int i)
{
if(vis[i]||flag==false){
return;
}
vis[i]=true;
for(int j=0;j<v;j++){
if(color[i]==color[j]&&map[i][j]==1){
flag=false;
return;
}
else if(map[i][j]==1&&vis[j]==false){
dfs(j);
}
}
}
int main()
{
cin>>v>>e>>k;
for(int i=0;i<e;i++){
int x,y;
cin>>x>>y;
x--;
y--;
map[x][y]=map[y][x]=1;
}
int m;
cin>>m;
for(int i=0;i<m;i++){
set<int>s;
for(int j=0;j<v;j++){
int c;
cin>>c;
s.insert(c);
color[j]=c;
}
if(s.size()!=k){
flag=false;
}else
{
memset(vis,false,sizeof(vis));
flag=true;
for(int j=0;j<v;j++){
dfs(j);
if(flag==false){
break;
}
}
}
if(flag){
cout<<"Yes"<<endl;
}else {
cout<<"No"<<endl;
}
}
return 0;
}