利用spfa流的性质,我直接拆两半,正解分奇偶(妙),而且判断是否整除且质数我用的是暴力根号,整洁判断质数个数差一(其他非spfa流怎么做?)

#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL;
const int N=;
const int P=N;
const int E=N*N/;
const int Inf=0x3f3f3f3f;
const LL oo=0xafafafafafafafafLL;
struct V{
int to,next,f;
LL c;
}c[E];
int head[P],t=;
inline void add(int x,int y,int z,LL _){
c[++t].to=y,c[t].next=head[x],head[x]=t,c[t].f=z,c[t].c=_;
}
int n;
int key[N],cnt[N],val[N];
int S,T;
LL dis[P];
int anc[P];
int q[P],front,back;
bool in[P];
int size[N];
LL ans,sum;
inline bool spfa(){
memset(dis,0xaf,sizeof(dis));
dis[S]=,in[S]=true,q[back++]=S;
if(back==P)back=;
while(front!=back){
int x=q[front++];in[x]=false;
if(front==P)front=;
for(int i=head[x];i;i=c[i].next)
if(c[i].f&&dis[x]+c[i].c>dis[c[i].to]){
dis[c[i].to]=dis[x]+c[i].c,anc[c[i].to]=i;
if(!in[c[i].to]){
q[back++]=c[i].to,in[c[i].to]=true;
if(back==P)back=;
}
}
}
return dis[T]!=oo;
}
inline int shoot(){
int f=Inf;
for(int i=anc[T];i;i=anc[c[i^].to])f=std::min(f,c[i].f);
for(int i=anc[T];i;i=anc[c[i^].to])c[i].f-=f,c[i^].f+=f;
return f;
}
int main(){
scanf("%d",&n);
S=n+,T=S+;
for(int i=;i<=n;++i){
scanf("%d",&key[i]);
int x=key[i];
for(int j=;j*j<=x;++j)
while(x%j==)++size[i],x/=j;
if(x!=)++size[i];
}
for(int i=;i<=n;++i){
scanf("%d",&cnt[i]);
if(size[i]&){
add(S,i,cnt[i],);
add(i,S,,);
}else{
add(i,T,cnt[i],);
add(T,i,,);
}
}
for(int i=;i<=n;++i)scanf("%d",&val[i]);
for(int i=;i<=n;++i)
if(size[i]&)
for(int j=;j<=n;++j)
if((size[j]&)==){
int x=key[i],y=key[j];
if(x>y)std::swap(x,y);
if(y%x==&&std::abs(size[i]-size[j])==){
add(i,j,Inf,(LL)val[i]*val[j]);
add(j,i,,-(LL)val[i]*val[j]);
}
}
while(spfa()){
int f=shoot();
if(f*dis[T]+ans<){
for(int i=;i<=f&&ans+dis[T]>=;++i)
ans+=dis[T],++sum;
break;
}
ans+=f*dis[T];
sum+=f;
}
printf("%lld",sum);
return ;
}

【BZOJ 4514】[Sdoi2016]数字配对 费用流的更多相关文章

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

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

  2. BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)

    BZOJ 洛谷 \(Solution\) 很显然的建二分图后跑最大费用流,但有个问题是一个数是只能用一次的,这样二分图两部分都有这个数. 那么就用两倍的.如果\(i\)可以向\(j'\)连边,\(j\ ...

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

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4514 思路 EK直接贪心做 <0的时候加上剩余返回 二分图a->b的时候 把b- ...

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

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

  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]数字配对--费用流

    看了一眼题目&数据范围,觉得应该是带下界的费用流 原来想拆点变成二分图,能配对的连边,跑二分图,可行性未知 后来看到另外一种解法.. 符合匹配要求的数要满足:质因子的个数相差为1,且两者可整除 ...

  8. 【BZOJ4514】【SDOI2016】数字配对 [费用流]

    数字配对 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 有 n 种数字,第 i 种数字是 ...

  9. [bzoj4514]数字配对[费用流]

    今年SDOI的题,看到他们在做,看到过了一百多个人,然后就被虐惨啦... 果然考试的时候还是打不了高端算法,调了...几天 默默地yy了一个费用流构图: 源连所有点,配对的点连啊,所有点连汇... 后 ...

随机推荐

  1. scala成长之路(7)函数进阶——可能是史上最浅显易懂的闭包教程

    由于scala中函数内部能定义函数,且函数能作为函数的返回值,那么问题来了,当返回的函数使用了外层函数的局部变量时,会发生什么呢?没错,就产生是闭包. 关于闭包的解释网上一大堆,但基本上都是照葫芦画瓢 ...

  2. Linux基础(04)、功能配置(调整防火墙、静态IP、环境变量)

    目录 一.centos防火墙 二.VMware网络连接方式 2.1.连接方式:桥接.NAT.仅主机 2.2.常见问题 三.centos配置静态IP 四.环境变量 4.1.什么是环境变量 4.2.临时修 ...

  3. 软件的按契约设计(DbC---Design by Contract)

    一.DbC基本概念 DbC的思想源于商业活动中商家和用户的行为(义务和利益关系),双方都要遵守一个契约(合同),交易才能完成. 商家与用户的契约关系如下: 1. 商家必须提供某种产品(义务),并有权获 ...

  4. Manacher(马拉车)学习笔记

    Manacher可以有效的在\(O(n)\)时间内解决一个字符串的回文子串的题目 目录 简介 讲解 推介 简单的练习 恐怖的练习QAQ 小结 简介 开头都说了,Manacher是目前解决回文子串的最有 ...

  5. 用filter()筛选出素数

    'use strict'; function get_primes(arr) { return arr.filter(function isPrime(number) { if (typeof num ...

  6. python2中将Unicode编码的中文和str相互转换

    在python2x版本中 关于中文汉字转换 1.中文------字符串格式 >>> s = '汉字' >>> type(s) <type 'str'> ...

  7. 20145202 2016-2017-2 《Java程序设计》第一周学习总结

    20145202 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 java是SUN公司推出的面相网络的编程语言. 特点:完全面向对象,与平台无关,跨平台性(例 ...

  8. MVC使用ajax取得JSon数据

    为了在view中获取模型中的数据,用ajax异步模式读取数据,再用json返回的view中. 1.controller中: [HttpPost] public ActionResult GetAjax ...

  9. 线上环境HBASE-1.2.0出现oldWALs无法自动回收情况;

    正常情况下,hmaster会定期清理oldWALs文件夹,一般该文件大小也就几百兆,但是我们线上 环境出现了该文件没有自动回收情况,如图: 该目录占用hdfs空间多达7.6T,浪费空间: 后来经过多番 ...

  10. java doc 编写

    总而言之,我觉得有用的是: @see 只要敲了@see 然后会自动写你的类名的,很方便.# 去连接字段 {@link } 只要敲了{@link } 然后会自动写你的类名的,很方便.# 去连接字段 如果 ...