p4068 [SDOI2016]数字配对
分析
我们考虑对所有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]数字配对的更多相关文章
- Luogu P4068 [SDOI2016]数字配对
反正现在做题那么少就争取做一题写一题博客吧 看到题目发现数字种类不多,而且结合价值的要求可以容易地想到使用费用流 但是我们如果朴素地建图就会遇到一个问题,若\(i,j\)符合要求,那么给\(i,j\) ...
- 图论(费用流):BZOJ 4514 [Sdoi2016]数字配对
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 820 Solved: 345[Submit][Status ...
- BZOJ 4514: [Sdoi2016]数字配对 [费用流 数论]
4514: [Sdoi2016]数字配对 题意: 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数 ...
- 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
[bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...
- BZOJ 4514: [Sdoi2016]数字配对
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1606 Solved: 608[Submit][Statu ...
- 【BZOJ4514】[Sdoi2016]数字配对 费用流
[BZOJ4514][Sdoi2016]数字配对 Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ...
- BZOJ4514——[Sdoi2016]数字配对
有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的 ...
- bzoj4514 [Sdoi2016]数字配对
Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...
- BZOJ4514[Sdoi2016]数字配对——最大费用最大流
题目描述 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci ...
随机推荐
- Nodejs-RESTFul架构
请求方法 一般会严格要求请求方法及其释义,下面给出常用的请求方法 如果请求头中存在 X-HTTP-Method-Override 或参数中存在 _method(拥有更高权重),且值为 GET, POS ...
- redis的no-appendfsync-on-rewrite参数
redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...
- element table固定表头,表的高度自适应解决方法
主要是通过在mounted生命周期中,改变tableHeight的值,来让表格的高度自适应. 标签: <el-table ref="table" :data="ta ...
- 四、Jmeter--参数化
一.CSV 参数化 1.我们做性能测试需要并发多个用户,为了真实模拟用户行为,我们需要模拟多个不同的用户登录,这是我们就需要进行参数化.这里我们选择比较常用的参数化方法-CSV Data Set Co ...
- bae3.0第四步 第一个polls系统
1.创建自己的app 进入新建的blog工程目录,执行其下面的manage.py来创建polls应用,命令为: python manage.py startapp polls2.定义app的model ...
- 用Azure上Cognitive Service的Face API识别人脸
Azure在China已经发布了Cognitive Service,包括人脸识别.计算机视觉识别和情绪识别等服务. 本文将介绍如何用Face API识别本地或URL的人脸. 一 创建Cognitive ...
- 用PHP编写登陆界面
网页的编写用PHP最方便.用php做了最简单的用户登录.创建的程序. 一. MySQL的设计 MySQL设计了两个表:members和sex.两张表的创建语句分别是: create table mem ...
- Java-API:java.util.Date
ylbtech-Java-API:java.util.Date Module java.base Package java.util Class Date java.lang.Object java. ...
- Generate web.xml deployment descriptor
eclipse 使用tomcat7.0建立Dynamic Web Project 时,next至步骤“Web Module”,此时勾选选项“Generate web.xml deployment de ...
- d-s证据理论
证据理论是Dempster于1967年首先提出,由他的学生Shafer于1976年进一步发展起来的一种不精确推理理论,也称为Dempster/Shafer 证据理论(D-S证据理论),属于人工智能范畴 ...