共计 955 个字符,预计需要花费 3 分钟才能阅读完成。
题目大意:给出一个无向图,并且给出一个点集,要求内部每个点两两直接相连;并且后面要判定是不是最大的满足这个点集的集合;
#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=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;
}