• loj526「LibreOJ β Round #4」子集


    分析

    求满足条件的最大团

    我们可以考虑建出补图

    发现对于奇数之间和偶数之间

    由于一定满足所以补图上一定可以将奇数一组偶数一组建成一个二分图

    求二分图最大独立集即可

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n,m,d[1010],g[1010][1010],a[1010],b[1010],c1,c2,ans,T,used[1010],wh[1010];
    inline bool work(int x){
        for(int i=1;i<=m;i++)
          if(g[x][i]&&used[i]!=T){
              used[i]=T;
              if(!wh[i]||work(wh[i])){
                wh[i]=x;
                return 1;
            }
          }
        return 0;
    }
    inline void go(){
        for(int i=1;i<=n;i++){
          ++T;
          if(work(i))ans++;
        }
    }
    signed main(){
        int i,j,k;
        scanf("%lld",&n);
        for(i=1;i<=n;i++){
          scanf("%lld",&d[i]);
          if(d[i]&1)a[++c1]=d[i];
            else b[++c2]=d[i];
        }
        n=c1,m=c2;
        for(i=1;i<=c1;i++)
          for(j=1;j<=c2;j++)
            if(__gcd(a[i],b[j])==1&&__gcd(a[i]+1,b[j]+1)==1)g[i][j]=1;
        go();
        printf("%lld",n+m-ans);
        return 0;
    }
  • 相关阅读:
    .net软件开发工程师面试题
    html笔记
    好用软件
    谷歌插件
    vue笔记
    js笔记
    数组去重
    css全局样式
    css笔记
    vscod插件
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11519775.html
Copyright © 2020-2023  润新知