层次结构代码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int MAX_N = 210;
int matrix[MAX_N][MAX_N];
int n,m,t;
bool is_clique(const vector<int> &list){
if(list.size() <= 1) return true;
for(int i = 0;i<list.size();i++){
for(int j = i+1;j<list.size();j++){
if(matrix[list[i]][list[j]] == 0){
return false;
}
}
}
return true;
}
bool is_max(const vector<int> &list){
for(int i = 1;i<=n;i++){
bool flag = true;
for(int j : list){
//如果其中一个不存在
if(matrix[i][j] == 0 || i == j){
flag = false;
}
}
//说明其他的顶点还可以和这个点连接
if(flag) {
return false;
}
}
return true;
}
int main(){
cin>>n>>m;
fill(matrix[0],matrix[0]+MAX_N*MAX_N,0);
for(int i = 0;i<m;i++){
int a,b;cin>>a>>b;
matrix[a][b] = matrix[b][a] = 1;
}
cin>>t;
for(int i = 0;i<t;i++){
int len;
cin>>len;
vector<int> list;
for(int j = 0;j<len;j++){
int tmp;
cin>>tmp;list.push_back(tmp);
}
if(is_clique(list) == false){
cout<<"Not a Clique";
}
else if(is_max(list) == false){
cout<<"Not Maximal";
}
else{
cout<<"Yes";
}
cout<<endl;
}
system("pause");
return 0;
}