储存每条边,遍历每条边判断两个顶点的颜色是否相同
使用set计算颜色数
#include<bits/stdc++.h>
using namespace std;
int N, M, K;
vector<pair<int, int>> v;
vector<int> color;
bool judge(void){
for(int i = 0; i < M; i++)
if(color[v[i].first] == color[v[i].second]) return false;
return true;
}
int main(void){
scanf("%d %d", &N, &M);
v.resize(N);
for(int i = 0; i < M; i++)
scanf("%d %d", &v[i].first, &v[i].second);
scanf("%d", &K);
color.resize(N);
for(int i = 0; i < K; i++){
set<int> s;
for(int j = 0; j < N; j++){
scanf("%d", &color[j]);
s.insert(color[j]);
}
if(judge()) printf("%d-coloring\n", s.size());
else printf("No\n");
}
return 0;
}