bzoj4514 [Sdoi2016]数字配对(网络流)
Description
Input
Output
一行一个数,最多进行多少次配对
Sample Input
2 4 8
2 200 7
-1 -2 1
Sample Output
HINT
n≤200,ai≤10^9,bi≤10^5,∣ci∣≤10^5
Source
鸣谢Menci上传
主要是要注意到质因数有几个(2^2算两个),这样个数为奇数只能与个数为偶数配对,个数为偶数只能和个数为奇数配对,然后就是一个二分图,随便建一建图跑最大费用流就好。
program rrr(input,output);
const
inf=;
type
etype=record
t,c,next,rev:longint;
w:int64;
end;
var
e:array[..]of etype;
num,a,d,q,fre,frv:array[..]of longint;
s:array[..]of boolean;
p:array[..]of longint;
c,dis:array[..]of int64;
inq:array[..]of boolean;
n,m,i,j,x,b,cnt,h,t,ans:longint;
w,f:int64;
function min(a,b:int64):int64;
begin
if a<b then exit(a) else exit(b);
end;
procedure ins(x,y,c:longint;w:int64);
begin
inc(cnt);e[cnt].t:=y;e[cnt].c:=c;e[cnt].w:=w;e[cnt].next:=a[x];a[x]:=cnt;
end;
procedure add(x,y,c:longint;w:int64);
begin
ins(x,y,c,w);e[cnt].rev:=cnt+;ins(y,x,,-w);e[cnt].rev:=cnt-;
end;
procedure spfa;
begin
for i:= to n do dis[i]:=-inf;dis[]:=;
h:=;t:=;q[]:=;inq[]:=true;
while h<>t do
begin
inc(h);if h> then h:=;
i:=a[q[h]];
while i<> do
begin
if (e[i].c>) and (dis[q[h]]+e[i].w>dis[e[i].t]) then
begin
dis[e[i].t]:=dis[q[h]]+e[i].w;
fre[e[i].t]:=i;frv[e[i].t]:=q[h];
if not inq[e[i].t] then
begin
inc(t);if t> then t:=;
q[t]:=e[i].t;inq[e[i].t]:=true;
end;
end;
i:=e[i].next;
end;
inq[q[h]]:=false;
end;
end;
begin
assign(input,'r.in');assign(output,'r.out');reset(input);rewrite(output);
fillchar(s,sizeof(s),true);s[]:=false;
for i:= to do if s[i] then
begin
j:=i+i;while j<= do begin s[j]:=false;j:=j+i; end;
end;
m:=;for i:= to do if s[i] then begin inc(m);p[m]:=i; end;
readln(n);
for i:= to n do read(num[i]);
for i:= to n do
begin
x:=num[i];j:=;d[i]:=;
while x> do begin while x mod p[j]= do begin inc(d[i]);x:=x div p[j]; end;inc(j);if j>m then break; end;
if x> then inc(d[i]);
end;
fillchar(a,sizeof(a),);cnt:=;
for i:= to n do begin read(b);if d[i] mod = then add(i,n+,b,) else add(,i,b,); end;
for i:= to n do read(c[i]);
for i:= to n do for j:=i+ to n do
if (abs(d[i]-d[j])=) and ((num[i] mod num[j]=) or (num[j] mod num[i]=)) then
begin
if d[i] mod = then add(j,i,,c[i]*c[j]) else add(i,j,,c[i]*c[j]);
end;
ans:=;inc(n);w:=;
while true do
begin
spfa;
if dis[n]=-inf then break;
i:=n;f:=;
while i<> do begin f:=min(f,e[fre[i]].c);i:=frv[i]; end;
if w+f*dis[n]< then begin ans:=ans+w div (-dis[n]);break; end
else begin ans:=ans+f;w:=w+f*dis[n]; end;
i:=n;while i<> do begin dec(e[fre[i]].c,f);inc(e[e[fre[i]].rev].c,f);i:=frv[i]; end;
end;
write(ans);
close(input);close(output);
end.
bzoj4514 [Sdoi2016]数字配对(网络流)的更多相关文章
- 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 ...
- [bzoj4514][SDOI2016]数字配对——二分图
题目描述 传送门 题解: 这个题真的是巨坑,经过了6个WA,2个TLE,1个RE后才终于搞出来,中间都有点放弃希望了... 主要是一定要注意longlong! 下面开始说明题解. 朴素的想法是: 如果 ...
- BZOJ4514 [Sdoi2016]数字配对 【费用流】
题目 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×c ...
- bzoj4514: [Sdoi2016]数字配对--费用流
看了一眼题目&数据范围,觉得应该是带下界的费用流 原来想拆点变成二分图,能配对的连边,跑二分图,可行性未知 后来看到另外一种解法.. 符合匹配要求的数要满足:质因子的个数相差为1,且两者可整除 ...
- bzoj4514: [Sdoi2016]数字配对(费用流)
传送门 ps:费用流增广的时候费用和流量打反了……调了一个多小时 每个数只能参与一次配对,那么这就是一个匹配嘛 我们先把每个数分解质因数,记质因子总个数为$cnt_i$,那如果$a_i/a_j$是质数 ...
- $loj\ 2031\ [SDOI2016]$数字配对 网络流
正解:网络流 解题报告: 我永远喜欢$loj$! 显然先预处理哪些$a$之间可以连边,然后考虑建两排点,连流量为$c_{i}\cdot c_{j}$,然后$ST$连$inf$,跑个费用流? 然后现在碰 ...
- 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
[bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...
随机推荐
- gcc 动态编译 动态库路径
gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [root@74-82-173-21 ...
- Eclipse-设置启动JDK版本
打开eclipse安装目录下的eclipse.ini文件,将红色内容加入 -vm ../Java/jdk1.6.0_26/bin (或者指向具体目录:D:/software/jdk_1.8u91/bi ...
- NLB网路负载均衡管理器详解(转载)
序言 在上一篇配置iis负载均衡中我们使用啦微软的ARR,我在那篇文章也中提到了网站的高可用性,但是ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器给down掉啦,那么做再多的应用服务 ...
- vlc播放rtsp之怪事
播放源:rtsp;//admin:12345@11.11.3.24:554/Streaming/channels/201 源是一台海康的nvr,在一台win2003的服务器用vlc2.2可以播放,但在 ...
- 20155310《网络对抗》Exp2 后门原理与实践
20155310<网络对抗>Exp2 后门原理与实践 基础问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? 在网上下载软件的时候,后门很有可能被捆绑在下载的软件当中: 浏览网 ...
- POJ 3041&&3020
两道二分图的练手题. 3041:题意大概是在一个N*N的图上有K个东西,你每次可以清除一行或一列上的所有东西.让你求最少的操作次数. 我们根据题意建图.对于每一个点的坐标(x,y)之间连一条边.比如样 ...
- LoRa---她的简介和她的专业术语
LoRa是LPWAN(低功耗广域网)通信技术的一种,其作用距离超过 15 公里,连接节点可达 100 万个.低功耗与长距离极限的组合可将最大数据速率提升至每秒 50千比特(Kbps). LoRa 是 ...
- 2、Docker镜像和镜像管理
一.镜像介绍 1.定义 一个只读层被称为镜像,一个镜像是永久不会变的. 由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的. 但是所有的变更都发生顶层的可写 ...
- [Direct2D开发] 从资源加载位图
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...
- Redux系列01:从一个简单例子了解action、store、reducer
其实,redux的核心概念就是store.action.reducer,从调用关系来看如下所示 store.dispatch(action) --> reducer(state, action) ...