Description

有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。

若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数,

那么这两个数字可以配对,并获得 ci×cj 的价值。

一个数字只能参与一次配对,可以不参与配对。

在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。


对于满足条件的\(a_i/a_j\)一定要满足\(a_i\)的质因子个数比\(a_j\)大一

所以可以对于每个数的质因子个数建二分图,只有异侧才有连边

至于总价值不小于0,在总价值<0的时候停止就行了


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#define M 1000001
#define LL long long
using namespace std;LL t,n,m,k,a[M],b[M],c[M],edge[M],nex[M],head[M],ver[M],cnt=1,h[M],d[M],cs[M],inq[M],cur[M],w[M],e[M],ed,zz,ans;
queue <LL> q;
void add(LL x,LL y,LL z,LL co)
{ver[++cnt]=y; nex[cnt]=head[x]; head[x]=cnt; edge[cnt]=z; cs[cnt]=co;ver[++cnt]=x; nex[cnt]=head[y]; head[y]=cnt; edge[cnt]=0; cs[cnt]=-co;
}bool spfa()
{memset(d,0,sizeof(d));memcpy(cur, head, sizeof(head));while(q.size()) q.pop();memset(h,-0x3f,sizeof(h));q.push(0); d[0]=1; h[0]=0; while(q.size()){LL x=q.front(); q.pop(); inq[x]=0;for(LL i=head[x];i;i=nex[i])if(edge[i] && h[ver[i]]<h[x]+cs[i]){h[ver[i]]=h[x]+cs[i]; d[ver[i]]=d[x]+1; if(!inq[ver[i]]) q.push(ver[i]);inq[ver[i]]=1;}}if(d[t]) return 1;return 0;
}LL dinic(LL x,LL flow)
{if(!flow || x==t) return flow;LL re=flow, k;for(LL & i=cur[x];i && re;i=nex[i])if(edge[i] && h[ver[i]]==h[x]+cs[i] && d[ver[i]]==d[x]+1){k=dinic(ver[i],min(re, edge[i]));re-=k; edge[i]-=k; edge[i^1]+=k;}return flow-re;
}LL fj(LL x)
{if(x==1) return 0;LL k=sqrt(x),ans=0; k+=1;for(LL i=2;i<=k;i++) if(x%i==0) while(x%i==0) x/=i,ans+=1;if(x!=1) ans+=1;return ans;
}int main()
{scanf("%lld",&n); t=n+1;for(LL i=1;i<=n;i++) scanf("%lld",&a[i]);for(LL i=1;i<=n;i++) scanf("%lld",&b[i]);for(LL i=1;i<=n;i++) scanf("%lld",&c[i]);for(LL i=1;i<=n;i++) w[i]=fj(a[i]);for(LL i=1;i<=n;i++) if(w[i]%2)for(LL j=1;j<=n;j++) if(w[j]%2==0 && ((a[i]%a[j]==0 && w[i]==w[j]+1)||(a[j]%a[i]==0 && w[j]==w[i]+1)))add(i,j,0x3f3f3f3f,c[i]*c[j]);for(LL i=1;i<=n;i++) if(w[i]%2) add(0,i,b[i],0);else add(i,t,b[i],0);while(spfa()){bool bll=1;while(k=dinic(0,0x3f3f3f3f)) {if(ed+h[t]*k<0) {ans+=ed/(-h[t]); bll=0; break;}ed+=h[t]*k, ans+=k;}if(!bll) break;}printf("%lld",ans);
}

转载于:https://www.cnblogs.com/ZUTTER/p/10253589.html

4514: [Sdoi2016]数字配对相关推荐

  1. bzoj 4514: [Sdoi2016]数字配对(二分图+费用最大流)

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1840  Solved: 703 [Submit][Sta ...

  2. bzoj4514[Sdoi2016]数字配对

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

  3. P4068 [SDOI2016]数字配对

    P4068 [SDOI2016]数字配对 题目大意 $n$种数字,第$i$种数字是$a_i$​.有$b_i$个,权值是$c_i$ 若两个数字$a_i$​.$a_j$满足,$a_i$是$a_j$的倍数, ...

  4. bzoj4514: [Sdoi2016]数字配对(费用流)

    传送门 ps:费用流增广的时候费用和流量打反了--调了一个多小时 每个数只能参与一次配对,那么这就是一个匹配嘛 我们先把每个数分解质因数,记质因子总个数为$cnt_i$,那如果$a_i/a_j$是质数 ...

  5. BZOJ4514 [Sdoi2016]数字配对

    题解 一开始看到这道题各种费用流的即视感. 首先这个配对应该可以想到构建二分图模型.构建出二分图后就比较容易把关系转化为边了. 但怎么构建呢?这个还是比较巧妙的,因为只有 小的数能整除大的数 且商为质 ...

  6. bzoj4514 [Sdoi2016]数字配对 费用流

    千万不要想复杂了,倍数和质数仅仅是判断两点之间能不能匹配的条件.. 主要问题还是一个分配问题 一开始想贪心,但好像不对,然后就由反例推出了关系图,然后就是二分匹配问题.. 由于每个点入的量+出的量== ...

  7. [费用流]数字配对,新生舞会

    文章目录 T1:数字配对 题目 题解 CODE T2:新生舞会 题目 题解 CODE(最大费用最大流版) CODE(最小费用最大流版) T1:数字配对 题目 有 n 种数字,第 i 种数字是 ai.有 ...

  8. 打乱 数字_崔召幼儿园中班悦享时光——亲子益智游戏数字配对

    亲爱的小朋友们,我们已经掌握了简单的,数字宝宝,今天让我们通过已有的数字经验和点数经验来玩一个数字配对的游戏吧! 准备: 1.准备骰子一个,吸管一支,数字1-6卡片. 2.一个鞋盒盖,一个可以装数字卡 ...

  9. YBTOJ洛谷P4068:数字配对(网络流)

    文章目录 题目描述 解析 代码 题目描述 有n种数字,第 i 种数字是 ai,有 bi个,权值是 ci. 若两个数字 ai,aj 满足, ai 是 aj 的倍数,且 ai/aj 是一个质数,那么这两个 ...

最新文章

  1. spring IOC创建对象方式
  2. 谷歌ALBERT模型V2+中文版来了:之前刷新NLP各大基准,现在GitHub热榜第二
  3. es-04-mapping和setting的建立
  4. 第3周实践项目1 顺序表的基本运算
  5. 【Kaggle-MNIST之路】自定义程序结构(七)
  6. Discrete Logging hunnu10590 pku2417 fzu 1352 hit 1928 zoj 1898
  7. lastindexof方法_Java Vector lastIndexOf()方法与示例
  8. 把人工智能、机器学习、深度学习串一串,串一个同心圆
  9. 饱和气压与温度的关系_高中物理讲义:固体液体与物态变化第3节《饱和汽与饱和汽压》...
  10. JSP中application的用法
  11. xp系统的无线配置服务器,Windows XP系统下无线网卡配置及安装
  12. 嵌入式开发系统的简介
  13. 流水线扫描条码自动分拣方案
  14. 分数加减法混合计算机,新苏教版小学五年级下册数学《5.2 分数加、减法混合运算》教案教学设计...
  15. [蛋蛋无厘头日记]收到礼物喵~o(∩_∩)o
  16. 继Facebook之后,微软正式宣布:全面进军「元宇宙」
  17. iOS中手势之拖动手势UIPanGestureRecognizer
  18. zcmu-1599 卡斯丁狗的炉石传说
  19. 【Linux入门】第三篇:软件包管理器yum和编辑器vim的使用
  20. 2021年6月PMP考试内容介绍

热门文章

  1. 2.4.4.1、Django新建APP(acounts)
  2. 网游生命周期在百度指数曲线上呈“M”形分布,各阶段搜索行为呈一定特征
  3. Microsoft Anti-Cross Site Scripting Library V1.5 发布了
  4. c语言产生一m序列,其特征多相式:1+x^3+x^5,M序列伪随机码在测距回答概率控制中的 - FPGA/ASIC技术 - 电子发烧友网...
  5. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...
  6. 紘康单片机_紘康HY11P14 - SOC芯片 - 产品展示 - SOC芯片_IC芯片pcba开发_深圳市联泰威电子有限公司...
  7. app获取个人信息是否合法_【关注】如何界定App违法违规收集个人信息?认定方法来了!...
  8. mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务
  9. PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取)
  10. 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?