传送门

分析

我们考虑对所有a[i]质因数分解,然后记cnt[i]为a[i]是由几个质数相乘得到的

然后我们建一个二分图,左面为所有cnt[i]为奇数的点,右面是为偶数的点

我们从源点向左面点连容量b[i]花费0的边,从右面点向汇点连容量b[i]花费0的边

然后两排点之间符合条件的点对连容量inf花费c[i]*c[j]的边

然后跑总花费不小于0的最大费用最大流即可

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int inf = 1e15+;
int n,a[],b[],C[],cnt[];
int x[],y[],l1,l2,s,t,Ans,now,sum;
int head[],w[],c[],nxt[],to[];
int fm[],ano[],S;
inline void add(int x,int y,int z,int cost){
nxt[++S]=head[x];head[x]=S;to[S]=y;w[S]=z;c[S]=cost;fm[S]=x;
nxt[++S]=head[y];head[y]=S;to[S]=x;w[S]=;c[S]=-cost;fm[S]=y;
ano[S]=S-;ano[S-]=S;
}
inline int work(int x){
int i,j,k=;
for(i=;i<=sqrt(x);i++)
while(x%i==)x/=i,k++;
if(x>)k++;
return k;
}
queue<int>q;
int iq[],nf[],la[],d[];
inline void go(){
int i,j,k;
la[s]=;
while(){
for(i=;i<=t;i++)d[i]=-inf;
q.push(s);
d[s]=,nf[s]=inf,iq[s]=;
while(!q.empty()){
int u=q.front();
q.pop(),iq[u]=;
for(i=head[u];i;i=nxt[i])
if(w[i]&&d[to[i]]<d[u]+c[i]){
d[to[i]]=d[u]+c[i];
la[to[i]]=i;
nf[to[i]]=min(w[i],nf[u]);
if(!iq[to[i]]){
q.push(to[i]);
iq[to[i]]=;
}
}
}
int be=now,ans=Ans,i=la[t];
if(!nf[t]||d[t]==-inf)return;
while(i){
w[i]-=nf[t];
w[ano[i]]+=nf[t];
now+=nf[t]*c[i];
i=la[fm[i]];
}
Ans+=nf[t];
if(now<){
Ans=ans+be/abs(d[t]);
return;
}
}
}
signed main(){
int i,j,k;
scanf("%lld",&n);
s=n+,t=n+;
for(i=;i<=n;i++)scanf("%lld",&a[i]),cnt[i]=work(a[i]);
for(i=;i<=n;i++)scanf("%lld",&b[i]);
for(i=;i<=n;i++)scanf("%lld",&C[i]);
for(i=;i<=n;i++)if(cnt[i]&)
for(j=;j<=n;j++)
if((cnt[i]==cnt[j]+&&a[i]%a[j]==)
||(cnt[j]==cnt[i]+&&a[j]%a[i]==))add(i,j,inf,C[i]*C[j]);
for(i=;i<=n;i++)
if(cnt[i]&)add(s,i,b[i],);
else add(i,t,b[i],);
go();
printf("%lld\n",Ans);
return ;
}

p4068 [SDOI2016]数字配对的更多相关文章

  1. Luogu P4068 [SDOI2016]数字配对

    反正现在做题那么少就争取做一题写一题博客吧 看到题目发现数字种类不多,而且结合价值的要求可以容易地想到使用费用流 但是我们如果朴素地建图就会遇到一个问题,若\(i,j\)符合要求,那么给\(i,j\) ...

  2. 图论(费用流):BZOJ 4514 [Sdoi2016]数字配对

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 820  Solved: 345[Submit][Status ...

  3. BZOJ 4514: [Sdoi2016]数字配对 [费用流 数论]

    4514: [Sdoi2016]数字配对 题意: 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数 ...

  4. 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流

    [bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...

  5. BZOJ 4514: [Sdoi2016]数字配对

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1606  Solved: 608[Submit][Statu ...

  6. 【BZOJ4514】[Sdoi2016]数字配对 费用流

    [BZOJ4514][Sdoi2016]数字配对 Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ...

  7. BZOJ4514——[Sdoi2016]数字配对

    有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的 ...

  8. bzoj4514 [Sdoi2016]数字配对

    Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...

  9. BZOJ4514[Sdoi2016]数字配对——最大费用最大流

    题目描述 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci ...

随机推荐

  1. translation exercise 3

    The high-resolution photograph was taken with a 135-mm lens mounted on a digital SLR camera.这张高清照片是用 ...

  2. Codeforces Round #258 (Div. 2)C(暴力枚举)

    就枚举四种情况,哪种能行就是yes了.很简单,关键是写法,我写的又丑又长...看了zhanyl的写法顿时心生敬佩.写的干净利落,简直美如画...这是功力的体现! 以下是zhanyl的写法,转载在此以供 ...

  3. C语言中time函数获取系统时间

    可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为: time_t time(time_t * t); ...

  4. apache php配置 虚拟目录 和 虚拟主机 多域名配置 原理解析

    虚拟目录配置 就是说,我们放项目放在D盘,F盘,而不是默认的www文件夹下也可以访问.比如这里,我在 D:/PHP/work 放入的项目文件. 在httpd.conf加入: (位置一般是在 </ ...

  5. NOIP模拟题 栅栏

    题目大意 给定一个$n\times m$的网格图,每次会选择一块矩形沿着网格线铺上栅栏,或者拆除之前铺的栅栏,或者询问两个格子能否不经过栅栏直接到达. 保证栅栏没有重叠或交叉,删去的栅栏删除前一定存在 ...

  6. CodeForces - 1025D: Recovering BST (区间DP)

    Dima the hamster enjoys nibbling different things: cages, sticks, bad problemsetters and even trees! ...

  7. HihoCoder1449 重复旋律6(后缀自动机)

    描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi想知道一部作品中所有长度为K的旋律中出现次数最多的旋律的出现次数.但是K不是固定的,小Hi想知道对 ...

  8. mysql之 Innobackupex全备恢复(原理、演示)

    一.  Innobackupex恢复原理    After creating a backup, the data is not ready to be restored. There might b ...

  9. maven 历史版本下载

    1.登录http://maven.apache.org/download.cgi 2.拉倒最下面,点击 archives 3.可以看到maven个版本,找自己需要的下载

  10. 解决windows下tomcat端口被占用[Address already in use: JVM_Bind]

    有时候电脑比较卡,项目比较大的情况下,eclipse没有完全停止tomcat的情况下,下次启动会出现tomcat的端口被占用无法启动的情况,主要报如下错误 解决方案 window下打开命令窗口(快捷键 ...