题目链接
思路:先存储边,用set记录每一个输入的顶点,遍历每一条边,如果两个顶点颜色相同,则输出no,否则输出set里的元素个数
代码:
#include<bits/stdc++.h>
using namespace std;
struct Edge{
int a,b;
}e[10005];
int n,m,k;
int v[10005];
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>e[i].a>>e[i].b;
}
cin>>k;
while(k--){
set<int> st;
for(int i=0;i<n;i++){
cin>>v[i];
st.insert(v[i]);
}
int i;
for(i=0;i<m;i++){
if(v[e[i].a]==v[e[i].b]){
cout<<"No"<<endl;
break;
}
}
if(i==m) cout<<st.size()<<"-coloring"<<endl;
}
return 0;
}