使用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;}}
}