細節題,爲什麼PAT第三題都不涉及什麼算法啊,有點奇怪。
#include <iostream>
#include <cstdio>
#include <map>
#include <set>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
int Nv,Ne;
int graph[210][210];
int main()
{
scanf("%d%d",&Nv,&Ne);
for(int i=0;i<=Nv;i++)
{
for(int j=0;j<=Nv;j++)
{
graph[i][j] = -1;
}
}
while(Ne--)
{
int x,y;
scanf("%d%d",&x,&y);
graph[x][y] = 1;
graph[y][x] = 1;
}
int q;
scanf("%d",&q);
while(q--)
{
int k;
int ar[110];
scanf("%d",&k);
bool flag = true;
vector<bool> vec;
set<int> s;
vec.resize(Nv+1);
for(int i=0;i<k;i++)
{
scanf("%d",&ar[i]);
vec[ar[i]] = true;
s.insert(ar[i]);
for(int j=0;j<i;j++)
{
if(graph[ar[i]][ar[j]]>0)
continue;
else{
flag = false;
break;
}
}
}
if(!flag)
{
printf("Not a Clique\n");
continue;
}
bool maximal = true;
for(int v=1;v<=Nv;v++)
{
if(!vec[v])
{
bool connect = true;
for(auto u:s)
{
if(graph[v][u]<0)
{
connect = false;
break;
}
}
if(connect)
{
maximal = false;
break;
}
}
}
if(maximal)
printf("Yes\n");
else{
printf("Not Maximal\n");
}
}
return 0;
}