分析:

  偶数对满足条件2,所有奇数对满足条件1。

  如果你能一眼看出这个规律,这道题就完成了一半。

  我们只需要将数分为两类,a值为奇数,就从S向这个点连容量为b值的边,a值为偶数,就从这个点向T连容量为b值的边。

  暴力枚举,对于奇集合和偶集合中不能共存的两个数,连容量为无穷大的边。

  求出最小割,代表这个割集要被我们舍弃。

  然后直接用b值总和减去最小割就好。

代码:

 #include<bits/stdc++.h>
#define ms(a,x) memset(a,x,sizeof(a))
#define pf(x) (1LL*x*x)
#define ll long long
using namespace std;
const int N=,M=,inf=0x3f3f3f3f;
struct node{int y,z,nxt;}e[M*];int S,T,tot=;
int d[N],h[N],c=,a[N],b[N],q[N],n,m;ll s[N];
int gcd(int x,int y){
return y?gcd(y,x%y):x;
} bool pd(ll x){
ll y=sqrt(x);return y*y!=x;
} void add(int x,int y,int z){
e[++c]=(node){y,z,h[x]};h[x]=c;
e[++c]=(node){x,,h[y]};h[y]=c;
} bool bfs(){
int f=,t=;ms(d,-);
q[++t]=S;d[S]=;
while(f<=t){
int x=q[f++];
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==-&&e[i].z)
d[y]=d[x]+,q[++t]=y;
} return (d[T]!=-);
} int dfs(int x,int f){
if(x==T) return f;int w,tmp=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]==d[x]+&&e[i].z){
w=dfs(y,min(e[i].z,f-tmp));
if(!w) d[y]=-;
e[i].z-=w;e[i^].z+=w;tmp+=w;
if(tmp==f) return f;
} return tmp;
} void dinic(){
while(bfs()) tot+=dfs(S,inf);
} signed main(){
scanf("%d",&n);int ans=;S=;T=n+;
for(int i=;i<=n;i++)
scanf("%d",&a[i]),s[i]=pf(a[i]);
for(int i=;i<=n;i++)
scanf("%d",&b[i]),ans+=b[i];
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(gcd(a[i],a[j])==&&!pd(s[i]+s[j]))
a[i]&?add(i,j,inf):add(j,i,inf);
for(int i=;i<=n;i++)
a[i]&?add(S,i,b[i]):add(i,T,b[i]);
dinic();printf("%d\n",ans-tot);
return ;
}

最小割

BZOJ 3158 千钧一发 最小割的更多相关文章

  1. bzoj 3158 千钧一发 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 \( a[i] \) 是奇数则满足条件1,是偶数则显然满足条件2: 因为如果把两个奇数 ...

  2. bzoj 3158 千钧一发(最小割)

    3158: 千钧一发 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 767  Solved: 290[Submit][Status][Discuss] ...

  3. bzoj 3158: 千钧一发【最小割】

    这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)^2+(2b+1)^2=4a^2+4a+4b^2+4b+2=2(2(a^2+a+b^2+b)+1) \)里面这个一定不是平方数因为除二后是 ...

  4. 【BZOJ-3275&3158】Number&千钧一发 最小割

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 748  Solved: 316[Submit][Status][Discus ...

  5. BZOJ 3158: 千钧一发

    3158: 千钧一发 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1201  Solved: 446[Submit][Status][Discuss ...

  6. bzoj 3158 千钧一发——网络流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 发现偶数之间一定满足第二个条件:奇数之间一定满足第一个条件 ( \( (2m+1)^{ ...

  7. spoj 839 OPTM - Optimal Marks&&bzoj 2400【最小割】

    因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求 ...

  8. BZOJ 3158 千钧一发 (最大流->二分图带权最大独立集)

    题面:BZOJ传送门 和方格取数问题很像啊 但这道题不能像网格那样黑白染色构造二分图,所以考虑拆点建出二分图 我们容易找出数之间的互斥关系,在不能同时选的两个点之间连一条流量为$inf$的边 由于我们 ...

  9. bzoj 2229 [Zjoi2011]最小割(分治+最小割)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2229 [题意] 回答若干个关于割不超过x的点对数目的询问. [思路] [最小割最多有n ...

随机推荐

  1. js调用的注意项

    注意将js代码写在调用的前面  这样他就知道了  自己所调用的函数是什么了

  2. 关于JAVA通过REST接口对arcGis Server数据进行增删改查

    一: 添加要素 public void create(BoxVo boxVo) throws Exception { // 创建HTTP客户端 CloseableHttpClient httpclie ...

  3. Metasloit渗透测试魔鬼训练营

    总结一句话  漏洞  攻击   拿权限  维持访问 课程目标 掌握黑客渗透攻击流程 掌握常用攻击软件     渗透测试工程师 掌握常见windows漏洞挖掘和攻击 掌握常见linux漏洞挖掘和攻击 参 ...

  4. E20180207-ts

    crumb n. 碎屑(尤指面包屑或糕饼屑); 面包心; 些许,少许; <俚>可鄙的人物;

  5. 关于MYSQL编辑乱码问题

    今天在SQLyog中编写表数据时突然出现一个bug,在此记录分享一下. 使用MySQL数据库时,讲中文插入到数据苦衷进行刷新后全部都变成了乱码问号,如下图中studentName列: 产生乱码是因为没 ...

  6. ReplacementShader 测试

    简介 参考网页 SetReplacementShader(Shader shader, string replacementTag); 参数中的replacementTag,是Shader中Tags中 ...

  7. UTF-8格式的文本文件程序读取异常

    最近在windows服务器上直接创建并手打输入配置参数,比如设置概率0.6,然后用java程序打开读取该参数,在本地linux环境下测试完全正常,但是一放到服务器上,就报NotNumber错误,查看了 ...

  8. Workflow 规则大全 最新版

    ​对于怎么操作Workflow我就不重复说明了 大家可以搜索我的另一条微博.Workflow,作为一款提高效率的软件,我觉得很有必要进行推广,当然我比较需要这里面的很多规则,先为己再为公.首先我只是出 ...

  9. Python圈中的符号计算库-Sympy(转载)

    <本文来自公众号“大邓带你玩python”,转载> import math math.sqrt(8) 2.8284271247461903 我们看看Python中结果 math.sqrt( ...

  10. WIN32 API ------ 最简单的Windows窗口封装类

    1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C+ ...