遍历所有边,不需要用深搜,只需要把读入的每条边再循环一遍就ok了
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
int arr[maxn];
struct node{
int u,v;
}E[maxn];
set<int> st;
int main(){
int n,m,u,v;
scanf("%d%d",&n,&m);
for(int i=0; i<m; i++){
scanf("%d%d",&u,&v);
E[i].u = u;
E[i].v = v;
}
int k;
scanf("%d",&k);
while(k--){
memset(arr,-1,sizeof(arr));
st.clear();
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
st.insert(arr[i]);
}
int flag=0;
for(int i=0;i<m;i++){
if(arr[E[i].u] == arr[E[i].v]){
flag=1;
break;
}
}
if(flag){
printf("No\n");
}else
printf("%d-coloring\n",st.size());
}
return 0;
}