二次联通门 : LibreOJ #526. 「LibreOJ β Round #4」子集

/*
LibreOJ #526. 「LibreOJ β Round #4」子集 考虑一下,若两个数奇偶性相同
若同为奇数, 那加1后就是偶数, gcd的乘积就一定不是1
偶数相同 那么我们把原数中的偶数分为一个集合,奇数分为一个集合
把互相之间不符合要求的连边 那么问题就转化为了二分图求最大独立集
*/
#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring> const int BUF = ;
char Buf[BUF], *buf = Buf;
#define INF 1e9
inline void read (long long &now)
{
for (now = ; !isdigit (*buf); ++ buf);
for (; isdigit (*buf); now = now * + *buf - '', ++ buf);
} #define Max 600
struct E { E *n, *r; int v, f; };
E *list[Max], poor[Max * ], *Ta = poor;
int S, T; class Flow_Type
{
private : int d[Max]; bool Bfs (int S, int T)
{
memset (d, -, sizeof d); d[S] = ;
std :: queue <int> Queue; int now; E *e;
for (Queue.push (S); !Queue.empty (); Queue.pop ())
{
now = Queue.front ();
for (e = list[now]; e; e = e->n)
if (d[e->v] == - && e->f)
{
d[e->v] = d[now] + ;
if (e->v == T) return true;
Queue.push (e->v);
}
}
return d[T] != -;
} int Flowing (int now, int F)
{
if (now == T || !F) return F;
int res = , pos; E *e;
for (e = list[now]; e; e = e->n)
{
if (d[e->v] != d[now] + || !e->f) continue;
pos = Flowing (e->v, e->f < F ? e->f : F);
if (pos)
{
F -= pos, res += pos, e->f -= pos, e->r->f += pos;
if (!F) return res;
}
}
if (res != F) d[now] = -;
return res;
} public : inline void In (int u, int v)
{
++ Ta, Ta->v = v, Ta->n = list[u], list[u] = Ta, Ta->f = ;
++ Ta, Ta->v = u, Ta->n = list[v], list[v] = Ta, Ta->f = ;
list[u]->r = list[v], list[v]->r = list[u];
} int Dinic (int S, int T)
{
int Answer = ;
for (; Bfs (S, T); Answer += Flowing (S, INF));
return Answer;
}
}; Flow_Type F;
long long key[Max];
long long Gcd (long long a, long long b) { return !b ? a : Gcd (b, a % b); }
int Main ()
{
fread (buf, , BUF, stdin);
long long N; read (N); S = N + , T = N + ;
register int i, j;
for (i = ; i <= N; ++ i)
{
read (key[i]);
if (key[i] & ) F.In (i, T);
else F.In (S, i);
}
for (i = ; i <= N; ++ i)
{
if ((key[i] & ) == )
for (j = ; j <= N; ++ j)
if (key[j] & )
if (Gcd (key[i], key[j]) == && Gcd (key[i] + , key[j] + ) == )
F.In (i, j);
} printf ("%d", N - F.Dinic (S, T)); return ;
} int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}

LibreOJ #526. 「LibreOJ β Round #4」子集的更多相关文章

  1. [LOJ#526]「LibreOJ β Round #4」子集

    [LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...

  2. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

  3. LibreOJ #528. 「LibreOJ β Round #4」求和

    二次联通门 : LibreOJ #528. 「LibreOJ β Round #4」求和 /* LibreOJ #528. 「LibreOJ β Round #4」求和 题目要求的是有多少对数满足他们 ...

  4. LibreOJ #527. 「LibreOJ β Round #4」框架

    二次联通门 : LibreOJ #527. 「LibreOJ β Round #4」框架 /* LibreOJ #527. 「LibreOJ β Round #4」框架 %% xxy dalao 对于 ...

  5. LibreOJ #525. 「LibreOJ β Round #4」多项式

    二次联通门 : LibreOJ #525. 「LibreOJ β Round #4」多项式 官方题解 : /* LibreOJ #525. 「LibreOJ β Round #4」多项式 由于会有多种 ...

  6. LibreOJ #524. 「LibreOJ β Round #4」游戏

    二次联通门 : LibreOJ #524. 「LibreOJ β Round #4」游戏 /* LibreOJ #524. 「LibreOJ β Round #4」游戏 找找规律就会发现.. 当有X的 ...

  7. LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

    二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱 ...

  8. LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律

    二次联通门 : LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 /* LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 set ...

  9. LibreOJ #6191. 「美团 CodeM 复赛」配对游戏

    二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...

随机推荐

  1. 怎么理解js的原型链继承?

    前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js ...

  2. Linux中shell字符串分隔、字符串替换、字符串拼接

    1.从properties文件中读取变量 SERVER_NAME=`sed '/project.config/!d;s/.*=//' conf/dubbo.properties | tr -d '\r ...

  3. 【转载】C#中使用Average方法对List集合中相应元素求平均值

    在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...

  4. vue中如何判断checkbox是否选中

    console.log(event.target.checked)     例:  

  5. springboot+security整合(1)

    说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...

  6. Eclipse - servlet显示无法导入javax.servlet包问题的解决方案

    项目名-->右键 Property-->选择 Java Build Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入 ...

  7. c#使用正则表达式处理字符串

    正则表达式可以灵活而高效的处理文本,可以通过匹配快速分析大量的文本找到特定的字符串. 可以验证字符串是否符合某种预定义的格式,可以提取,编辑,替换或删除文本子字符串. 现在如下特定的字符串: stri ...

  8. iPad所有平板型号屏幕尺寸

    1.iPad所有平板型号屏幕尺寸 尺寸 iPad型号 物理点 像素点 倍数 7.9 iPad Mini 768x1024 768x1024 1 7.9 iPad Mini 2 iPad Mini 3 ...

  9. Js网站开发学习第一天

    1.登录时,记住密码单选框,鼠标移上去显示div里的内容,移开则消失: <head> <meta http-equiv="Content-Type" conten ...

  10. 编译安装php服务报错问题:configure: error: Cannot find libmysqlclient under /usr.

    在编译安装php服务时报错: checking for MSSQL support via FreeTDS... nochecking for MySQL support... yeschecking ...