传送门

分析

我们考虑对所有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. Nodejs-RESTFul架构

    请求方法 一般会严格要求请求方法及其释义,下面给出常用的请求方法 如果请求头中存在 X-HTTP-Method-Override 或参数中存在 _method(拥有更高权重),且值为 GET, POS ...

  2. redis的no-appendfsync-on-rewrite参数

    redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...

  3. element table固定表头,表的高度自适应解决方法

    主要是通过在mounted生命周期中,改变tableHeight的值,来让表格的高度自适应. 标签: <el-table ref="table" :data="ta ...

  4. 四、Jmeter--参数化

    一.CSV 参数化 1.我们做性能测试需要并发多个用户,为了真实模拟用户行为,我们需要模拟多个不同的用户登录,这是我们就需要进行参数化.这里我们选择比较常用的参数化方法-CSV Data Set Co ...

  5. bae3.0第四步 第一个polls系统

    1.创建自己的app 进入新建的blog工程目录,执行其下面的manage.py来创建polls应用,命令为: python manage.py startapp polls2.定义app的model ...

  6. 用Azure上Cognitive Service的Face API识别人脸

    Azure在China已经发布了Cognitive Service,包括人脸识别.计算机视觉识别和情绪识别等服务. 本文将介绍如何用Face API识别本地或URL的人脸. 一 创建Cognitive ...

  7. 用PHP编写登陆界面

    网页的编写用PHP最方便.用php做了最简单的用户登录.创建的程序. 一. MySQL的设计 MySQL设计了两个表:members和sex.两张表的创建语句分别是: create table mem ...

  8. Java-API:java.util.Date

    ylbtech-Java-API:java.util.Date Module java.base Package java.util Class Date java.lang.Object java. ...

  9. Generate web.xml deployment descriptor

    eclipse 使用tomcat7.0建立Dynamic Web Project 时,next至步骤“Web Module”,此时勾选选项“Generate web.xml deployment de ...

  10. d-s证据理论

    证据理论是Dempster于1967年首先提出,由他的学生Shafer于1976年进一步发展起来的一种不精确推理理论,也称为Dempster/Shafer 证据理论(D-S证据理论),属于人工智能范畴 ...