1142 Maximal Clique (25 分)【难度: 一般 / 知识点: 模拟】

在这里插入图片描述
https://pintia.cn/problem-sets/994805342720868352/problems/994805343979159552
数据范围很小,直接按照题意模拟即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int g[N][N],n,m;
int solve(vector<int> ve)
{
    
    
    unordered_map<int,int>hush;
    for(int i=0;i<ve.size();i++)
    {
    
    
        hush[ve[i]]++;
        for(int j=i+1;j<ve.size();j++)
            if(i!=j&&!g[ve[i]][ve[j]]) return 0;//存在任意俩点之间没有边
    }
    for(int i=1;i<=n;i++)
    {
    
    
        if(!hush[i])
        {
    
    
            bool flag=1;
            for(int j=0;j<ve.size();j++)
                if(!g[i][ve[j]]) flag=0;
            if(flag) return 2;//存在某个点和所有点都有边
        }
    }
    return 1;
}
int main(void)
{
    
    
    cin>>n>>m;
    while(m--)
    {
    
    
        int a,b; cin>>a>>b;
        g[a][b]=g[b][a]=1;
    }
    int t; cin>>t;
    while(t--)
    {
    
    
        int k,x; cin>>k;
        vector<int>ve;
        for(int i=0;i<k;i++)
            cin>>x,ve.push_back(x);
        int ans=solve(ve);
        if(ans==0) puts("Not a Clique");
        else if(ans==1) puts("Yes");
        else puts("Not Maximal");
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_46527915/article/details/121576796