正题

题目链接:https://www.luogu.com.cn/problem/P4068


题目大意

nnn种数字,第iii个是aia_iai​,有bib_ibi​个,价值为ci∗cjc_i*c_jci​∗cj​

如果一个数字axa_xax​和aya_yay​配对要求axay\frac{a_x}{a_y}ay​ax​​是一个质数且产生cx∗cyc_x*c_ycx​∗cy​的价值,一个只能配对一次

求在配对价值和不小于000的前提下配对数最多


解题思路

下面那个条件就直接二分+费用流判断即可。

考虑如何建立二分图的条件,满足要求的配对ax,aya_x,a_yax​,ay​那么就是axa_xax​比aya_yay​多一个质因数,所以我们按照质因数分解后的质数个数的奇偶性进行二分图即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=210,inf=1e18;
struct node{ll to,next,w,c;
}a[N*N*3];
ll n,s,t,tot,f[N],mf[N],pre[N];
ll w[N],h[N],b[N],c[N],ls[N],ansc,answ;
bool v[N];queue<int> q;
void addl(ll x,ll y,ll w,ll c){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[tot].c=c;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0;a[tot].c=-c;return;
}
bool SPFA(){memset(f,0xcf,sizeof(f));q.push(s);f[s]=0;mf[s]=inf;v[s]=1;while(!q.empty()){ll x=q.front();v[x]=0;q.pop();for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(!a[i].w)continue;if(f[x]+a[i].c>f[y]){f[y]=f[x]+a[i].c;mf[y]=min(mf[x],a[i].w);pre[y]=i;if(!v[y])q.push(y),v[y]=1;}}}return f[t]>-inf;
}
void Updata(){ll x=t,w=mf[t];while(x!=s){a[pre[x]].w-=w;a[pre[x]^1].w+=w;x=a[pre[x]^1].to;}answ+=mf[t];ansc+=mf[t]*f[t];return;
}
ll check(ll x){memset(ls,0,sizeof(ls));tot=1;ansc=answ=0;ll S=n+2;addl(s,S,x,0);for(ll i=1;i<=n;i++)if(h[i]&1)addl(S,i,b[i],0);else addl(i,t,b[i],0);for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)if(w[i]%w[j]==0&&h[i]==h[j]+1){if(h[i]&1)addl(i,j,inf,c[i]*c[j]);else addl(j,i,inf,c[i]*c[j]);}while(SPFA())Updata();return ansc;
}
int main()
{scanf("%lld",&n);s=0;t=n+1;for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);w[i]=x;for(ll j=2;j*j<=x;j++)while(x%j==0)x/=j,h[i]++;if(x!=1)h[i]++;}for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);ll l=1,r=n*1e5;while(l<=r){ll mid=(l+r)>>1;if(check(mid)>=0)l=mid+1;else r=mid-1; }check(r);printf("%lld\n",answ);
}

P4068-[SDOI2016]数字配对【二分,费用流】相关推荐

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

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

  2. P4068 [SDOI2016]数字配对

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

  3. 【BZOJ4514】数字配对,费用流

    传送门 题面: 写在前面:网络流练习太少-- 思路:费用流,最大或最小随意,看你给费用的符号,建图的话是把数分成两部分,分别是奇数个质因子和偶数个质因子,然后通过题目给出的关系连边(分部分的原因是形成 ...

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

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

  5. bzoj4514[Sdoi2016]数字配对

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

  6. 【网络流24题】【LOJ6010】数字梯形(费用流)

    problem 给定一个n行的数字梯形,第一行有m个数字 从第一行的每个数字开始往左下或右下移动到底,累加路径上的值 求数字总和最大. 满足限制: 1.路径互不相交 2.路径仅在数字结点处相交 3.路 ...

  7. BZOJ4514 [Sdoi2016]数字配对

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

  8. SCUT - 48 - 飞行员的配对方案 - 费用流

    https://scut.online/p/48 一道二分图匹配,跑费用流就可以过了(其实最大流都可以了). #include<bits/stdc++.h> #define MAXN_ 5 ...

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

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

最新文章

  1. Node.js 究竟是什么?
  2. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
  3. object-c html,object.html
  4. 经典C语言程序100例之七四
  5. L2-009. 抢红包-PAT团体程序设计天梯赛GPLT
  6. unity 线程断点时卡机_Java使用JDI进行线上程序断点信息记录
  7. 【线性代数及其应用】02 -矩阵代数
  8. 音频处理之语音加速播放
  9. php 实现网站克隆,自己写的php curl库实现整站克隆功能
  10. git使用——15.搭建自己的gitlab服务器来存放我们的git项目
  11. 什么网页游戏是按地地狱划分服务器的,不思议迷宫地域边境详细攻略 全方位介绍地狱边境所有玩法...
  12. Python 利用win32com批量给excel加密
  13. 通过Python获取拉钩招聘网站的公司详细地址
  14. Android检测手机是否安装app
  15. Java 基础 Collection集合
  16. php3d饼状图的教学,php使用Jpgraph创建3D饼形图效果示例
  17. 父进程退出,保证子进程交由init。
  18. 微信公众号--php
  19. 行列式的两种计算方法
  20. 【Java数据结构】泛型详解+图文,通配符上界、下界

热门文章

  1. oracle cpu 100%原因,oracle 12.1 cpu 100%
  2. oracle unpivot 空值,sql – 处理UNPIVOT中的NULL值
  3. java 反射 本类,关于Java反射中基本类型的class有关问题
  4. linux适合搭建什么服务器吗,Linux 的三种服务器的搭建
  5. mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据
  6. python测试4_Python 各种测试框架简介(四):pytest
  7. java流上传文档把磁盘撑满_BOOT目录磁盘占用满处理
  8. leetcode59. 螺旋矩阵 II
  9. Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。
  10. C++ class实现邻接矩阵存储的图(完整代码)