本题难点主要在理解题意吧,给了顶点数和边数,然后给了一个图。下面给了K种情况需要去判断,不同的数字代表不同的颜色,顺序是按照顶点序号排列的。遍历搜索每条边对应的两个顶点颜色是否相同就行了。
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include<stdio.h>
using namespace std;
struct node
{
int a;
int b;
};
int main(){
int n,m;
cin>>n>>m;
vector<node> edge(n);
for (int i = 0; i < m; i++)
{
int x,y;
cin>>x>>y;
edge[i].a=x;
edge[i].b=y;
}
int k;
cin>>k;
for (int i = 0; i < k; i++)
{
int flag=1,a[n];
set<int> color;
for (int j = 0; j < n; j++)
{
int z;cin>>z;
a[j]=z;
color.insert(z);
}
for (int j = 0; j < m; j++)
{
if(a[edge[j].a]==a[edge[j].b]){
printf("NO\n");
flag=0;
break;
}
}
if(flag==1){
printf("%d-coloring\n",color.size());
}
}
}