图问题,本题考察的知识点有,判断图中的最大全连通分量(团clique) 。
坑点如下
1,判断全连通的方法,如2,3,4,5四个结点顺序
2,3,4,5.
3,4,5.
4,5.
则四个结点全连通。
整体代码如下
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
vector<int>aj[210];
int e[210][210];
set<int>E;
int main(){
int v,ed,v1,v2,q,k,b,n;
scanf("%d%d",&n,&ed);
for(int i=0;i<ed;i++){
scanf("%d%d",&v1,&v2);
e[v1][v2]=e[v2][v1]=1;
E.insert(v1);
E.insert(v2);
}
scanf("%d",&q);
for(int i=0;i<q;i++){
scanf("%d",&k);
int isC=1,isM=1;
int hash[210]={0};
vector<int>v(k);
for(int l=0;l<k;l++)
{scanf("%d",&v[l]);
hash[v[l]]=1;
}
for(int l=0;l<k;l++){
if(isC==0)break;
for(int p=l+1;p<k;p++)
{if(e[v[l]][v[p]]==0)
{isC=0;
printf("Not a Clique\n");
break;}
}
}
if(isC==0)continue;
for(auto it=E.begin();it!=E.end();it++)
{ bool flag=true;
for(int l=0;l<k;l++){
if(e[*it][v[l]]==0)
{flag=false;
break;}
}
if(flag==true){printf("Not Maximal\n");
isM=0;
break;}
}
if(isM==0)continue;
printf("Yes\n");
}
return 0;
}