題目大意:給出一個無向圖,並且給出一個點集,要求內部每個點兩兩直接相連;
並且後面要判定是不是最大的滿足這個點集的集合;
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
using namespace std;
using std::vector;
const int maxn=210;
int mem[maxn][maxn]={0};
int main(){
int n,m;
int a,b,c;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d",&a);
scanf("%d",&b);
mem[a][b]=mem[b][a]=1;
}
int query_num;
scanf("%d",&query_num);
for(int ii=0;ii<query_num;ii++){
scanf("%d",&a);
bool flag=true;
vector<int>query;
bool vis[maxn]={false};
for(int j=0;j<a;j++){
scanf("%d",&c);
query.push_back(c);
vis[c]=true;
}
//元素輸入完畢;
for(int i=0;i<query.size()-1;i++){
for(int j=i+1;j<query.size();j++){
if(mem[query[i]][query[j]]==0)
flag=false;
}
}
//判斷輸入元素是不是集合;
if(!flag){
cout<<"Not a Clique"<<endl;
continue;
}
int f=false;
for(int i=1;i<=n;i++){
if(!vis[i]){
//該節點不在集合i;
//cout<<"point:"<<i<<endl;
for(int j=0;j<query.size();j++){
if(mem[query[j]][i]==0)
break;
if(j==query.size()-1)
f=true;
}
}
}
if(f){
cout<<"Not Maximal"<<endl;
}else{
cout<<"Yes"<<endl;
}
}
system("pause");
return 0;
}