/*团体程序设计 天梯赛
图的着色问题*/
#include<iostream>
#include<cstring>
#include<set>
using namespace std;
const int N =510;
int v,e,k,col[N],vis[N],g[N][N];
bool dfs(int u){
for(int i=1;i<=v;i++){
if(!vis[i]&&g[u][i]==1){
vis[i] =true;
if(col[u] ==col[i]) return false;
else return dfs(i);
}
}
return true;
}
int main(){
memset(g,0x3f,sizeof g);
cin>>v>>e>>k;
for(int i=0;i<e;i++){
int a,b;
cin>>a>>b;
g[a][b] = g[b][a]=1;
}
int n;
cin>>n;
for(int i=1;i<=n;i++){
set<int>s;
for(int j=1,c; j<=v;j++){
cin>>c;
col[j]=c;
s.insert(c);
}
if(s.size()!=k){
puts("No");
continue;
}
memset(vis,0,sizeof vis);
int flag = true;
for(int j=1;j<=v;j++){
if(!vis[i]){
if(!dfs(i)){
flag = false;
break;
}
}
}
if(flag) puts("Yes");
else puts("No");
}
return 0;
}
天梯赛——图着色问题
最新推荐文章于 2024-07-22 10:02:43 发布