题目难度:两颗星
题目大意:给出一个图的结构,然后给出一系列的查询,问给出查询的序列,是否是图中的极大完全图(自己瞎起的名字),也就是要求包含尽可能多的边的完全图的子图。
题目坑点:刚开始看到数据量,小于两百,感觉还好,但是又觉得循环可能会导致时间复杂度很高,事实证明,居然一边提交ac。。
代码如下:
#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cstring>
#define MAX 220
using namespace std;
int G[MAX][MAX],vertex[MAX];
int main(){
int Nv,Ne,a,b,Q,num,temp,flag=1;
fill(G[0],G[0]+MAX*MAX,0);
cin>>Nv>>Ne;
while(Ne--){
cin>>a>>b;
G[a][b]=1;
G[b][a]=1;
}
cin>>Q;
while(Q--){
cin>>num;
flag=1;
for(int i=0;i<num;i++){
cin>>vertex[i];
if(flag==1){
for(int j=0;j<i;j++){
if(G[vertex[j]][vertex[i]]!=1){
flag=-1;
break;
}
}
}
}
if(flag==-1)
cout<<"Not a Clique"<<endl;
else{
for(int i=1;i<=Nv;i++){
int isCon=1;
for(int j=0;j<num;j++){
if(i==vertex[j]||G[i][vertex[j]]==0){
isCon=0;
break;
}
}
if(isCon==1){
flag=0;
break;
}
}
if(flag==1)
cout<<"Yes"<<endl;
else
cout<<"Not Maximal"<<endl;
}
}
}