当前位置: 首页 > 编程日记 > 正文

4514: [Sdoi2016]数字配对

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

相关文章:

bzoj 3339 莫队

题意&#xff1a; 求任意一个区间的SG函数。 想到线段树&#xff0c;但是线段树合并很麻烦。 线段树——分块。 分块的一个应用就是莫队算法。 怎么暴力递推呢&#xff1f; 从一个区间到另一个区间&#xff0c;Ans 取决于 Ans 和 加入和删除的这个数的大小比较。加入一个新数&a…

Ajax检测注册用户是否存在

HTML代码如下:LoginValidate.aspx<% Page Language"C#" AutoEventWireup"true" CodeFile"LoginValidate.aspx.cs" Inherits"LoginValidate" %><html xmlns"http://www.w3.org/1999/xhtml" ><head runat"…

Java Robot对象实现服务器屏幕远程监视

Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者&#xff1a; xiepan110 出处&#xff1a; BLOG 责任编辑&#xff1a;方舟   摘要&#xff1a;  有时候&#xff0c;在Java应用程序开发中&#xff0c;如&#xff1a;远程监控或远程教学&#xff0c;常常需要对计…

Oracle常用傻瓜问题1000问

1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_temp 2. ORACLE9IAS WEB CACHE的初始默认用户和密码&#xff1f; administrator/administrator 3. oracle 8.0.5怎么创建数据库? 用orainst。如果有motif界面&…

安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

简介 在做Python开发时&#xff0c;安装需要的第三方库时&#xff0c;大多数人喜欢选择在命令行用pip进行安装。 然而有时敲入pip命令会提示‘pip’不是内部或外部命令。。如图&#xff1a; 解决办法 1、在python安装目录中找得到script文件夹&#xff0c;查看文件夹内部是否存…

ehcache导致Tomcat重启出错

最近使用ehcache出现了问题&#xff0c;只要在配置文件中打开缓存&#xff0c;Tomcat在重启时就会报内存溢出异常。按说ehcache自己开启的资源&#xff0c;应该自己关闭才是。经查阅资料发现&#xff0c;需要在web.xml中配置一个监听器&#xff0c;该监听器会在应用程序关闭的时…

[置顶]完美简版学生信息管理系统(附有源码)管理系统

简版学生信息管理系统 目前为止找到的简版系统中最新、最全的java类管理系统 点击进入简版系统 如果无法直接连接&#xff0c;请进入: https://blog.csdn.net/weixin_43419816/article/details/104234590 做CSDN最完美的搬运工&#xff01;

怎样成为一名优秀的系统工程师

一个优秀的系统集成工程师(包括售前和实施)的技术线路笔者注:并不是每个都要求掌握,只是寻找自己的一条技术线路1&#xff1a;网络基础知识&#xff1a;深刻理解网络基本概念&#xff0c;例如>ISO/OSI、TCP/IP、VLAN、各种LAN、WAN协议、各种路由协议、NAT等等Cisco&#xf…

星期六第一次加班

虽然说老板叫我们加班&#xff0c;但是貌似没有我什么事情的饿&#xff0c;和张明在一起&#xff0c;真的很不自在&#xff0c;我知道我很自大&#xff0c;我在漫漫的改变自己&#xff0c;他听不惯我说话&#xff0c;但是有什么的呢&#xff01;我相信他是一个好的程序员&#…

WPF入门(三)-几何图形之不规则图形(PathGeometry) (2)

WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2)上一节我们介绍了PathGeometry中LineSegment是点与点之间绘制的一条直线&#xff0c;那么我们这一节来看一下点与点之间绘制曲线ArcSegment 先来看一段代…

zookeeper图形工具——zkui

虽然zookeeper安装包提供了客户端工具zkcli&#xff0c;但是命令特别少 &#xff0c;每次想看看里面的节点信息特别费劲。 幸好有图形工具——zkui&#xff0c;https://github.com/echoma/zkui&#xff0c;下载地址 https://github.com/echoma/zkui/wiki/Download。 上个图&…

第一篇博客,java学生管理系统(挑战全网最全)

java学生信息管理系统&#xff0c;&#xff08;课设必备&#xff09;&#xff0c;附有源码和简版链接 博主虽然技术不高&#xff0c;但是系统写的真的是没话说&#xff0c;留着开学java课设用了。 直接转载链接了&#xff0c;查看系统入口 https://blog.csdn.net/weixin_4341…

ccna实验大全

ccna实验大全启动接口&#xff0c;分配IP地址&#xff1a; router> router> enable router# router# configure terminal router(config)# router(config)# interface Type Port router(config-if)# no shutdown router(config-if)# ip address IP-Address Subnet-Mask r…

实现分布式服务注册及简易的netty聊天

现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册&#xff0c;比如一个集群服务器&#xff0c;需要知道哪些服务器在线&#xff0c;哪些服务器不在线。 ZK有一个功能&#xff0c;就是创建临时节点&#xff0c;当机器启动应用的时候就会…

《深入理解计算机系统》学习心得二:关于show-bytes的 学习

此段代码&#xff0c;使用强制类型转换来访问和打印不同程序对象的字节表示。show-bytes打印出每个以十六进制表示的字节。 /* show-bytes - prints byte representation of data */ /* $begin show-bytes */ #include <stdio.h> /* $end show-bytes */ #include <st…

Jquery基础:append、prepend、after、before、appendTo的区别

append() 是在被选元素的结束标签前面(即改被选元素的内部)插入指定内容。 <html><head><script type"text/javascript" src"/jquery/jquery.js"></script><script type"text/javascript">      $().ready(…

域名删除时间及whois状态说明

国际域名状态 Active : 正常状态&#xff1b; Registry-hold&#xff1a;注册局暂停&#xff0c;域名没有解析&#xff0c;不能正常使用&#xff0c;可以续费&#xff1b; Registry-lock&#xff1a;注册局锁定&#xff0c;域名有解析&#xff0c;正常使用&#xff0c;不能更改…

JavaScript中的正则表达式解析

正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个字符串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。 要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor functio…

Markdown上下标内容多于一项

用{ }括起来。转载于:https://www.cnblogs.com/144823836yj/p/10261391.html

详述FileUpload 控件上传单文件

第一步&#xff1a;添加两个Label控件&#xff0c;一个是用于标题显示&#xff0c;一个是用于上传完成消息提示。 第二步&#xff1a;创建一个FileUpload控件到Page页面&#xff0c;注意FileUpload控件本身只提供文件的选举操作&#xff0c;而实际的文件上传功能需要我们创建一…

基于μC/OS—III的CC1120驱动程序设计

基于μC&#xff0f;OS—III的CC1120驱动程序设计 时间&#xff1a;2014-01-21 来源&#xff1a;电子设计工程 作者&#xff1a;张绍游&#xff0c;张贻雄&#xff0c;石江宏关键字&#xff1a;CC1120 嵌入式操作系统 STM32F103ZE 驱动设计 摘要&#xff1a;本文根据实…

LinkQueue的基本创建

队列是一种先进先出&#xff08;first in first out,缩写为FIFO&#xff09;的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端进行删除元素。和平常我们排队打饭类似。 链队列是用链表表示的队列的简称。一个链队列需要两个分别指示队头和队尾的指针&#xff08;分…

请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...

最笨的办法当然是二层嵌套循环&#xff0c;但觉得应该有更好的方法&#xff0c;但是着实想不出来&#xff0c;想听听大家的意见&#xff0c;大家帮帮小弟 i.e string[] A{"X","Y","Z","W"}; string[] B{"X","E",&…

超市账单管理系统之-------登录

报500的错大部分都是springmvc的jar包没有导对&#xff0c;最好用3点几的版本 。。。。在项目中要把包导对 pom.xml 所需要的jar包 1 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"2 xs…

进制转换converse

栈和队列是在软件设计中常用的两种数据结构&#xff0c;它们的逻辑结构和线性表相同。 其特点在于运算受到了限制&#xff1a;栈按“后进先出”的规则进行操作&#xff0c;队按“先进先出”的规则进行操作&#xff0c;故称运算受限制的线性表。 从数据类型的角度看: 它们和线…

40.多进程同步--锁--多把锁

多进程同步 首先多进程默认是并发行为&#xff0c;多个进程同时执行执行的顺序&#xff0c;以及何时执行完毕无法控制 多个进程如果涉及到了通信&#xff0c;数据的有序性无法保证需要锁来控制进程之间执行的顺序对于进程资源的控制缺点&#xff1a;同步进程&#xff0c;并发没…

.net导出到Excel与Word中(带上下标)

//输出到excel的函数,可直接copy到 cs页面privatevoidOutExcel(GridView dg, stringname) { dg.Visible true; Response.Clear(); Response.Buffer true; Response.Charset "GB2312"; name "attachment;filename&quo…

越来越不想写代码了

越来越不想写代码了今天刚下载了PD12版本&#xff0c;做了一个需求分析以及试用了几个新功能在对C&#xff03;支持的情况。感觉非常不错&#xff0c;特别是在代码生成方面&#xff0c;比我想的要好多了&#xff0c;而且比起其它语言的代码生成&#xff0c;好像就是对C&#xf…

【代码笔记】Web-CSS-CSS id和Class选择器

一&#xff0c;效果图。 二&#xff0c;代码。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>CSS id和class选择器</title> <style> #para1 { text-align: center; color: red; } .center { text-align: …

javascript取得鼠标的位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>JavaScript得到鼠标坐标<…