#include<iostream>
#include<map>
#include<vector>
#include<bits/stdc++.h>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int n,m;
cin>>n>>m;
int mp[n][n]={};
vector<int> aa[n];
for(int i=0;i<m;i++){
int start,end;
cin>>start>>end;
mp[start][end]=1;
mp[end][start]=1;
aa[start].push_back(end);
aa[end].push_back(start);
}
int k;
cin>>k;
for(int i=0;i<k;i++){
int nv;
cin>>nv;
int mmp[n][n]={};
memcpy(mmp,mp,sizeof(int)*(n*n));
for(int j=0;j<nv;j++){
int temp;
cin>>temp;
if(temp<n&&temp>=0){
for(int k=0;k<aa[temp].size();k++){
mmp[temp][aa[temp][k]]=0;
mmp[aa[temp][k]][temp]=0;
}
}else{
continue;
}
}
int p,flag=1;
for(p=0;p<n;p++){
int q;
for(q=0;q<n;q++){
if(mmp[p][q]==1||mmp[q][p]==1){
cout<<"No"<<endl;
flag=0;
break;
}
}
if(flag==0){
break;
}
}
if(flag==1){
cout<<"Yes"<<endl;
}
}
return 0;
}
提交之后最后2个测试点出现段错误,如何解决?
思路不变的话可以改用变长数组来实现嘛?
如何实现两个变长数组互相赋值?
可以参考柳诺的解决方法,采用vector存储边的两个顶点,对每个边查看是否至少有一个顶点出现在查询集之中;
memcpy只能复制定长数组,记得加上sizeof(int);
二维数组初始化也用a[maxn]={};