题目
思路
暴力搜索
代码
#include <iostream>
#include <vector>
using namespace std;
const int nmax = 201;
int graph[nmax][nmax] = { 0 };
int visited[nmax];
int n, m;
int Judge(int num) {
vector<int> vec;
for (int j = 0; j < num; ++j) {
int tmp;
cin >> tmp;
visited[tmp] = 1;
vec.emplace_back(tmp);
}
for (int i = 0; i < vec.size(); ++i) {
for (int j = i + 1; j < vec.size(); ++j) {
if (!graph[vec[i]][vec[j]])
return 0;
}
}
for (int i = 1; i <= n; ++i) {
if (!visited[i]) {
bool flag = true;
for (auto& p : vec) {
if (!graph[i][p]) {
flag = false;
break;
}
}
if (flag)
return 1;
}
}
return 2;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
graph[u][v] = graph[v][u] = 1;
}
int qn;
cin >> qn;
for (int i = 0; i < qn; ++i) {
int num;
cin >> num;
memset(visited, 0, sizeof(visited));
switch (Judge(num)) {
case 0:
cout << "Not a Clique" << endl; break;
case 1:
cout << "Not Maximal" << endl; break;
case 2:
cout << "Yes" << endl; break;
}
}
return 0;
}