#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <cstring>
using namespace std;
vector<int > v[10010];
bool vis[10010];
int color[10010];
bool dfs(int id){
//1
vis[id]=true;
for(int j=0;j<v[id].size();j++){
int u=v[id][j];
if(color[u]==color[id]){
return false;
}else if(vis[u]==false){
dfs(u);
}
}
return true;
}
int main()
{
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 num;
cin>>num;
for(int i=0;i<num;i++){
memset(vis,0,sizeof(vis));
memset(color,-1,sizeof(color));
set<int>s;
for(int j=0;j<n;j++){
scanf("%d",&color[j+1]);
s.insert(color[j+1]);
}
if(s.size()!=k){
cout<<"No\n";
continue;
}
bool flag;
for(int i=0;i<n;i++){
//vis[i+1]=true;
flag=dfs(i+1);//顶点和颜色都从1到V编号
if(flag==false){
cout<<"No\n";
break;
}
}
if(flag==true)cout<<"Yes\n";
}
return 0;
}
|邻接表 dfs|L2-3 图着色问题 (25分)
猜你喜欢
转载自blog.csdn.net/weixin_44769957/article/details/108909122
今日推荐
周排行