loj526「LibreOJ β Round #4」子集

Posted yzxverygood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

以上是关于loj526「LibreOJ β Round #4」子集的主要内容,如果未能解决你的问题,请参考以下文章

「LibreOJ β Round #4」子集

[LOJ#525]「LibreOJ β Round #4」多项式

$loj526 [LibreOJ eta Round #4]$ 子集 图论

LOJ 「LibreOJ β Round #4」子集

「LibreOJ β Round #4」求和

loj516 「LibreOJ β Round #2」DP 一般看规律