天梯赛 L2-023 图着色问题
使用vector<vector<int>> g(N)去存储边,然后每次判断每个节点的邻节点是不是相同的颜色,需要注意的是不同的颜色一定需要为K种,不能多也不能少。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k;
cin>>n>>m>>k;
vector<vector<int>> g(n+5);
for(int i = 1 ; i <= m ; i++){
int x,y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
int q;
cin>>q;
while(q--){
vector<int> col(n+1,0); //节点对应颜色
unordered_map<int,int> cnt;
for(int i = 1 ; i <= n ; i++){
cin>>col[i];
cnt[col[i]]++;
}
if(cnt.size() != k){
cout<<"No"<<endl;
continue;
}
bool flag = 0;
for(int i = 1 ; i <= n ; i++){
for(auto x : g[i]){
if(col[x] == col[i]){
cout<<"No"<<endl;
flag = 1;
break;
}
}
if(flag){
break;
}
}
if(!flag){
cout<<"Yes"<<endl;
}
}
}