这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)2+(2b+1)2=4a2+4a+4b2+4b+2=2(2(a2+a+b2+b)+1) \)里面这个一定不是平方数因为除二后是个奇数不能再分一个2出来;偶数和偶数一定满足2,因为gcd>=2

考虑最小割,先加上所有收益然后求割之后满足条件的最小代价

所以对于a[i]&1,连接(s,i,b[i]),否则连接(i,t,b[i]),对于不能同时选的i,j来说,连(i,j),表示要么割掉i的收益要么割掉j的收益

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
const int N=2005;
int n,a[N],b[N],h[N],cnt=1,le[N],s,t,ans;
struct qwe
{
int ne,to,va;
}e[N*N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v,int w)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
e[cnt].va=w;
h[u]=cnt;
}
void ins(int u,int v,int w)
{
add(u,v,w);
add(v,u,0);
}
bool bfs()
{
memset(le,0,sizeof(le));
queue<int>q;
le[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=h[u];i;i=e[i].ne)
if(e[i].va>0&&!le[e[i].to])
{
le[e[i].to]=le[u]+1;
q.push(e[i].to);
}
}
return le[t];
}
int dfs(int u,int f)
{
if(u==t||!f)
return f;
int us=0;
for(int i=h[u];i&&us<f;i=e[i].ne)
if(e[i].va>0&&le[e[i].to]==le[u]+1)
{
int t=dfs(e[i].to,min(e[i].va,f-us));
e[i].va-=t;
e[i^1].va+=t;
us+=t;
}
if(!us)
le[u]=0;
return us;
}
int dinic()
{
int r=0;
while(bfs())
r+=dfs(s,1e9);
return r;
}
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
long long clc(int a,int b)
{
return 1ll*a*a+1ll*b*b;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=1;i<=n;i++)
b[i]=read();
s=0,t=n+1;
for(int i=1;i<=n;i++)
{
if(a[i]&1)
ins(s,i,b[i]);//,cerr<<i<<endl;
else
ins(i,t,b[i]);
ans+=b[i];
}
for(int i=1;i<=n;i++)
if(a[i]&1)
for(int j=1;j<=n;j++)
if(!(a[j]&1)&&gcd(a[i],a[j])==1&&(long long)sqrt(clc(a[i],a[j]))*(long long)sqrt(clc(a[i],a[j]))==clc(a[i],a[j]))
ins(i,j,1e9);//,cerr<<i<<" "<<j<<endl;
printf("%d\n",ans-dinic());
return 0;
}

最新文章

  1. Redis存储Tomcat集群的Session
  2. Linux学习笔记(一)2015.4.13
  3. Shell脚本中执行mysql的几种方式(转)
  4. as关键词还有另外一个用途,那就是修改 方法 的访问控制
  5. SQL Server 2012 配置数据库邮件
  6. 【poj1182】 食物链
  7. Optimizing shaper — hashing filters (HTB)
  8. Engineering Economics
  9. mongodb 备份与恢复
  10. 备份的一些小tip
  11. Node.js在任意目录下使用express命令‘不是内部或外部命令’解决方法
  12. Java基础学习笔记十六 集合框架(二)
  13. Python003-测试辅助示例应用数据库更新语句创建
  14. day 59 Bootstrap学习
  15. 关于 TRegEx.Split()
  16. 9/252D图的画法
  17. namenode 问题小记
  18. streamsets stream selector 使用
  19. 82. Remove Duplicates from Sorted List II(删除有序链表中的重复元素)
  20. Spring框架学习(6)使用ioc注解方式配置bean

热门文章

  1. 【BZOJ1419】Red is good 期望
  2. 【BZOJ4407】于神之怒加强版 莫比乌斯反演
  3. spring 监听器简介
  4. Go Concurrency Patterns: Timing out, moving on
  5. Java Message Service
  6. python数据分析之ipython
  7. 获取app-package和app-activity的值
  8. 科目三靠边停车难度升级,超过50cm不合格怎么破?
  9. 电脑设备对于IT人员,犹如武器对于士兵
  10. HTML预览 正则替换