#include<vector>
#include<iostream>
#include<map>
using namespace std;
#define MAXN 210
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int nv,ne;
cin>>nv>>ne;
int hash[MAXN][MAXN]={};
for(int i=0;i<ne;i++){
int a,b;
cin>>a>>b;
hash[a][b]=1;
hash[b][a]=1;
}
int q;
cin>>q;
for(int i=0;i<q;i++){
int temp,temp1;
cin>>temp;
vector<int> t;
map<int,int> mp;
for(int j=0;j<temp;j++){
cin>>temp1;
t.push_back(temp1);
mp[temp1]=1;
}
int flag=1;
for(int k=0;k<temp;k++){
for(int p=k+1;p<temp;p++){
if(hash[t[k]][t[p]]==0){
flag=0;
break;
}
}
if(flag==0) break;
}
int sign=1;
if(flag==1){
vector<int> s;
for(int tt=1;tt<=nv;tt++){
if(mp[tt]==0){
s.push_back(tt);
}
}
for(int j=0;j<s.size();j++){
for(int k=0;k<t.size();k++){
if(hash[s[j]][t[k]]!=1){
break;
}
if(k==t.size()-1)
sign=0;
}
if(sign==0){
cout<<"Not Maximal"<<endl;
break;
}
}
if(sign==1){
cout<<"Yes"<<endl;
}
}else if(flag==0) cout<<"Not a Clique"<<endl;
}
return 0;
}
二刷更新一个方法~
#include<bits/stdc++.h>
using namespace std;
const int MAXN=202;
int G[MAXN][MAXN]={};
int nv,ne;
int check(vector<int> p){
int sign=0;map<int,int> mp;
for(int i=0;i<p.size();i++){
for(int j=0;j<p.size();j++){
if(G[p[i]][p[j]]==0){
sign=1;break;
}
}
}
for(int i=0;i<p.size();i++) mp[p[i]]=1;
if(sign==1){
return -1;
}else{
int signal=0;
for(int i=1;i<=nv;i++){
if(mp[i]==0){
int wait=0;
for(int j=0;j<p.size();j++){
if(G[p[j]][i]==0){
wait=1;break;
}
}
if(wait==0){
signal=1;break;
}
}
}
if(signal==1) return 0;
else return 1;
}
}
int main()
{
//freopen("in.txt","r",stdin);
cin>>nv>>ne;
for(int i=0;i<ne;i++){
int s,t;cin>>s>>t;
G[s][t]=G[t][s]=1;
G[s][s]=G[t][t]=1;
}
for(int i=1;i<=nv;i++) G[i][i]=1;
int m;cin>>m;
for(int i=0;i<m;i++){
int k;cin>>k;
vector<int> ppp;
for(int i=0;i<k;i++){
int temp;cin>>temp;ppp.push_back(temp);
}
int flag=check(ppp);
if(flag==1) cout<<"Yes"<<endl;
if(flag==0) cout<<"Not Maximal"<<endl;
if(flag==-1) cout<<"Not a Clique"<<endl;
}
return 0;
}