甲1142 Maximal Clique (25)

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;

int G[210][210];
int Nv,Ne,M;
int A[210];
int father[210];

int counte(int x)
{
    int result=0;
    int add=0;
    while(x>0)
    {
        result+=add;
        add++;
        x--;
    }
    return result;
}

int main()
{
    scanf("%d%d",&Nv,&Ne);
    memset(G,-1,sizeof(G));
    for(int i=0;i<Ne;i++)
    {
        int c1,c2;
        scanf("%d%d",&c1,&c2);
        G[c1][c2]=1;
        G[c2][c1]=1;
    }
    scanf("%d",&M);
    for(int i=0;i<M;i++)
    {
        memset(father,-1,sizeof(father));
        int c;
        scanf("%d",&c);
        for(int j=0;j<c;j++)
        {
            scanf("%d",&A[j]);
            father[A[j]]=A[0];
        }
        bool flag1=true;
        bool flag2=false;
        bool flag3=false;
        for(int j=0;j<c;j++)
        {
            for(int k=j+1;k<c;k++)
            {
                if(G[A[j]][A[k]]<0)
                {
                    flag1=false;
                }
            }
        }
        if(flag1)
        {
            for(int j=1;j<=Nv;j++)
            {
                if(father[j]!=A[0])
                {
                    flag3=true;
                    for(int k=0;k<c;k++)
                    {
                        if(G[A[k]][j]<0)
                        {
                            flag3=false;
                            break;
                        }
                    }
                }
                if(flag3==true)
                {
                    flag2=true;
                    break;
                }
            }
        }
        if(flag1&&!flag2)
        {
            printf("Yes\n");
        }
        if(flag1&&flag2)
        {
            printf("Not Maximal\n");
        }
        if(!flag1)
        {
            printf("Not a Clique\n");
        }

    }
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80486091