- 图的遍历用二维vector邻接表存图,所谓邻接就是把相邻的点存到以这个序号为下标的vector里面
- 就是你题目要读进来就是一条边一条边地读进来,然后对于你来说就是两个地方都push_back一下就好了。
- 然后要记得,你题目这边都给出来了,就是说你的结点的编号是从1到v的,所以你遍历的时候第一层就用1到v就好了。
- 要记得你循环跳出的条件
#include<bits/stdc++.h>
using namespace std;
int v,e,k;
const int N = 510;
int color[N];
vector<int> g[N];
bool check(){
bool flag = true;
for(int i=1;i<=v;i++){
for(int j=0;j<g[i].size();j++){
if(color[g[i][j]]==color[i]){
flag = false;
break;
}
}
if(flag == false)break;
}
return flag;
}
int main(){
cin>>v>>e>>k;
int a,b;
for(int i=0;i<e;i++){
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
int q;
cin>>q;
set<int> tot;
while(q--){
tot.clear();
for(int i=1;i<=v;i++){
cin>>color[i];
tot.insert(color[i]);
}
if(tot.size() != k ){
cout<<"No"<<endl;
}
else{
if(check()==true){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
}
}