题目:

思路分析:
就是遍历邻接表而已
1. dfs遍历 (有环 所有要限制次数足够大就行!
2.枚举顶点遍历
代码实现:
const int MAX=100010;
int V,E,K;
int co[MAX];
vector<int>v[MAX];
int flag;
//void check(int pos,int now){
// if(now>K*4) return;
// for(int i=0;i<v[pos].size();i++){
// int u=v[pos][i];
// if(co[u]==co[pos]) {
// flag=0;
// return;
// }
//
// check(u,now+1);
//
// }
//}
void solve(){
for(int i=1;i<=V;i++){
for(int j=0;j<v[i].size();j++){
int u=v[i][j];
if(co[i]==co[u]){
flag=0;
return;
}
}
}
}
int main(){
cin>>V>>E>>K;
for(int i=0;i<E;i++){
int a,b;
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
int n;
cin>>n;
while (n--) {
set<int>st;
for(int i=1;i<=V;i++){
cin>>co[i];
st.insert(co[i]);
}
flag=1;
// check(1,0);
solve();
if(st.size()>K) cout<<"No"<<endl;
else if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
1354



被折叠的 条评论
为什么被折叠?



