题目大意:有一个无向图,判断所给的集合是否为最大团
1.如果集合内的某两个点不能连通,那么就不是团。
2.如果集合的点都能相互连通,且都至少能连向集合外相同的一个点,那么就不是最大团,否则就是最大团
这一题就是直接枚举就好了
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
const int N = 300;
int n,m,k,a,b;
int g[N][N];
int main()
{
cin >> n >> m;
for(int i = 0; i < m; i ++)
{
cin >> a >> b;
g[a][b] = g[b][a] = 1;
}
cin >> k;
while(k --)
{
int x,f = 1;
cin >> x;
vector<int>v(x);
unordered_map<int,int>mp;
for(int i = 0; i < x; i ++) cin >> v[i];
for(int i = 0; i < x; i ++)
{
for(int j = 0; j < x; j ++)
{
if(j == i) continue;
if(g[v[i]][v[j]] == 0)
{
f = 0;break; //不连通
}
}
if(f == 0) break;
}
int f1 = 1;
for(int i = 0; i < x; i ++)
{
for(int j = 1; j <= n; j ++)
{
if(v[i] == j) continue;
if(g[v[i]][j]) mp[j] ++;
if(mp[j] == x) //存在集合外的点与集合内的点都连通
{
f1 = 0;break;
}
}
if(f1 == 0) break;
}
if(f == 0) puts("Not a Clique");
else if(f1 == 1) puts("Yes");
else puts("Not Maximal");
}
return 0;
}