这题没看太懂,只能懂大致意思,主要是根据样例来猜测题意
大致意思是给出一个图,还有已经涂好色的方案,要求任意一条边的两端不能有重复的颜色(这题在之前的真题出现过,很像)
遍历每个点,然后判断该点是不是满足条件,即判断该点和它相邻点颜色是不是冲突
然后颜色个数set解决!
#include<iostream>
#include<cmath>
#include<cstdio>
#include<vector>
#include<set>
#include<queue>
using namespace std;
vector<int> vec[10003];
set<int> s;
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
vec[a].push_back(b);
vec[b].push_back(a);
}
int t;
cin>>t;
while(t--){
s.clear();
int a[10033];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
s.insert(a[i]);
}
queue<int> que;
que.push(0);
int flag=0;
int v[10003]={0};
while(que.size()&&flag==0){
int x=que.front();
que.pop();
if(v[x]) continue;
v[x]=1;
int col=a[x];
for(int i=0;i<vec[x].size();i++){
int fz=a[vec[x][i]];
if(col==fz){
flag=1;
break;
}
que.push(vec[x][i]);
}
}
if(flag==0){
printf("%d-coloring\n",s.size());
}
else printf("No\n");
}
return 0;
}
欢迎大家加入 早起学习群,一起学习一起进步!(群号:642179511)