題目大意:給出一個無向圖,而且給出一個點集,要求內部每一個點兩兩直接相連;
而且後面要斷定是否是最大的知足這個點集的集合;ios
#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; }