发现题目中描述的配对条件可以理解为:\(pc_i-pc_j=1\) 且 \(a_i\bmod a_j=0\),其中 \(pc_i\) 表示 \(a_i\) 的质因数个数。

自然想到以 \(pc\) 奇偶性建立二分图,可以配对的点间连一条边。

先不考虑费用,三种边为:

  1. \((s,i,b_i)\),其中 \(pc_i\bmod 2=1\)。
  2. \((i,t,b_i)\),其中 \(pc_i\bmod 2=0\)。
  3. \((i,j,INF)\),其中 \(pc_i\bmod 2=1,pc_j\bmod 2=0,|pc_i-pc_j|=1,\max(a_i,a_j)\bmod\min(a_i,a_j)=0\)。

    前两种边的费用为 \(0\),最后一种为所得价值 \(c_i\times c_j\)。

由于我们希望总价值为正,所以 \(spfa\) 他死了 用来跑最长路。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=205,M=1e5+5;
int n,s,t,k=1,h[N],p[M],vis[N];
int cnt,l,m,to[M],nxt[M],lst[N];
int pc[N],vv[M],a[N],d[N],o[N];
ll w[M],f[M],flw[N],dis[N],c[N];
void add(int x,int y,ll z,ll q){
w[++k]=z;f[k]=q;to[k]=y;
nxt[k]=h[x];h[x]=k;
f[++k]=-q;to[k]=x;
nxt[k]=h[y];h[y]=k;
}queue<int>q;
int spfa(){
while(q.size()) q.pop();
for(int i=s;i<=t;i++)
lst[i]=-1,vis[i]=0,dis[i]=-1e18;
flw[s]=1e18;dis[s]=0;q.push(s);
while(q.size()){
int x=q.front();
q.pop();vis[x]=0;
for(int i=h[x];i;i=nxt[i]){
int y=to[i];ll vl=w[i];
if(vl&&dis[y]<dis[x]+f[i]){
lst[y]=i;
flw[y]=min(flw[x],vl);
dis[y]=dis[x]+f[i];
if(!vis[y])
q.push(y),vis[y]=1;
}
}
}return lst[t]!=-1;
}ll mxflw,mncst;
void MCMF(){
while(spfa()){
if(mncst+dis[t]*flw[t]<0){
mxflw+=mncst/(-dis[t]);return;
}mxflw+=flw[t];mncst+=dis[t]*flw[t];
for(int i=t;i!=s;i=to[lst[i]^1])
w[lst[i]]-=flw[t],w[lst[i]^1]+=flw[t];
}
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
for(int i=2;i<M;i++){
if(vv[i]==0) p[++cnt]=i;
for(int j=1;j<=cnt&&i*p[j]<M;j++){
vv[i*p[j]]=1;
if(i%p[j]==0) break;
}
}cin>>n;t=n+1;
for(int i=1;i<=n;i++){
cin>>a[i];int x=a[i];
for(int j=1;x>1&&p[j]*p[j]<=a[i];j++)
while(x%p[j]==0) x/=p[j],pc[i]++;
if(x>1) pc[i]++;
if(pc[i]%2) d[++l]=i;
else o[++m]=i;
}for(int i=1;i<=n;i++){
int b;cin>>b;
if(pc[i]%2) add(s,i,b,0);
else add(i,t,b,0);
}for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=l;i++)
for(int j=1;j<=m;j++){
int x=d[i],y=o[j];
if(pc[x]+1==pc[y]&&a[y]%a[x]==0)
add(x,y,1e18,c[x]*c[y]);
if(pc[y]+1==pc[x]&&a[x]%a[y]==0)
add(x,y,1e18,c[x]*c[y]);
}
MCMF();cout<<mxflw;
return 0;
}//spfa:它没有死透

[SDOI2016] 数字配对 题解的更多相关文章

  1. BZOJ4514:[SDOI2016]数字配对——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4514 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj ...

  2. 【BZOJ4514】[Sdoi2016]数字配对 费用流

    [BZOJ4514][Sdoi2016]数字配对 Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ...

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

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

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

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

  5. 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流

    [bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...

  6. BZOJ 4514: [Sdoi2016]数字配对

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1606  Solved: 608[Submit][Statu ...

  7. [bzoj4514][SDOI2016]数字配对——二分图

    题目描述 传送门 题解: 这个题真的是巨坑,经过了6个WA,2个TLE,1个RE后才终于搞出来,中间都有点放弃希望了... 主要是一定要注意longlong! 下面开始说明题解. 朴素的想法是: 如果 ...

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

    题目 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×c ...

  9. BZOJ4514——[Sdoi2016]数字配对

    有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的 ...

  10. bzoj4514 [Sdoi2016]数字配对

    Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...

随机推荐

  1. Vue项目报TypeError: Cannot read properties of undefined (reading '_wrapper')

    前情 最近在做一个营销活动的时候,我选择了Vue技术栈来开发. 坑位 项目看似一切都正常,但当我在绑定的js事件中去修改当前组件的data上的值时会报错:TypeError: Cannot read ...

  2. 数据万象AVIF图片压缩 - 小程序省流量利器

    导语 微信小程序因其便捷的开发环境和天然的微信生态,使得越来越多企业平台通过小程序建立自己的业务.在小程序上使用图片非常广泛,但传统格式图片(如 JPG/PNG)占用空间大,加载速度慢,可能导致昂贵的 ...

  3. 基于.NET WinForm开发的一款硬件及协议通讯工具

    前言 今天大姚给大家分享一款基于.NET WinForm开发的一款硬件及协议通讯工具:PLC-CommunTools. 项目介绍 PLC-CommunTools是一款基于.NET WinForm开发的 ...

  4. Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/websocket/mqtt/多线程采集

    一.功能特点 支持多种协议,包括Modbus_Rtu_Com/Modbus_Rtu_Tcp/Modbus_Rtu_Udp/Modbus_Rtu_Web/Modbus_Tcp/Modbus_Udp/Mo ...

  5. TensorRT-YOLO:灵活易用的 YOLO 部署工具

    TensorRT YOLO TensorRT-YOLO 是一款专为 NVIDIA 设备设计的易用灵活.极致高效的YOLO系列推理部署工具.项目不仅集成了 TensorRT 插件以增强后处理效果,还使用 ...

  6. Windows10中安装了ubuntu虚拟机后xshell无法连接到ubuntu

    安装了ubuntu虚拟机后发现shell无法连接到ubuntu的排查步骤: 步骤 1: 检查虚拟机网络配置确认虚拟机网络模式:确认虚拟机的网络模式是否设置为桥接模式或NAT模式.桥接模式可以让你的虚拟 ...

  7. 使用 httputils + sbe (Simple Binary Encoding) 实现金融级 java rpc

    1.认识 Simple Binary Encoding (sbe) 高性能Java库 Agrona 的主要目标是减少性能瓶颈,通过提供线程安全的直接和原子缓冲区.无装箱操作的原始类型列表.开散列映射和 ...

  8. Datawhale AI 夏令营-天池Better Synth多模态大模型数据合成挑战赛-baseline复现与理解总结(更新中)

    在大数据.大模型时代,随着大模型发展,互联网数据渐尽且需大量处理标注,为新模型训练高效合成优质数据成为新兴问题."天池 Better Synth - 多模态大模型数据合成挑战赛"应 ...

  9. 自动化测试平台用例执行_Android

      一.搭建过程 参考:https://testerhome.com/topics/15534 (https://github.com/jerrylizilong/autotest_platform) ...

  10. Solution Set -「NOIP Simu.」20221005

    \(\mathscr{A}\sim\)「CF 1252G」Performance Review   Link & Submission.   Tag:「水题无 tag」   记 \(A=a_1 ...