题目大意

自己看

题解

我们打表观察规律发现一定能构成一张二分图
也就是不存在奇环
所以我们一般保证费用非负的最大流即可.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
template<typename T>inline void read(T &x){x=0;char ch;bool flag = false;while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = 256;
const int inf = 0x3f3f3f3f;
inline bool judge(int n){if(n == 1) return false;if(n == 2) return true;for(int i = 2;i*i<=n;++i){if(n % i == 0) return false;}return true;
}
int a[maxn],b[maxn];ll c[maxn];
namespace gra{struct Edge{int to,next;}G[21010];int head[maxn],cnt;void add(int u,int v){//printf("%d\n",cnt);G[++cnt].to = v;G[cnt].next = head[u];head[u] = cnt;}inline void insert(int u,int v){add(u,v);add(v,u);}int col[maxn];
#define v G[i].tovoid dfs(int u,int c){col[u] = c;for(int i = head[u];i;i=G[i].next){if(col[v] == -1) dfs(v,c^1);}}
#undef v
}
namespace net{struct Edge{int to,next,cap;ll cost;}G[21010];int head[maxn],cnt=1;void add(int u,int v,int c,ll co){//printf("%d\n",cnt);G[++cnt].to = v;G[cnt].next = head[u];head[u] = cnt;G[cnt].cap = c;G[cnt].cost = co;}inline void insert(int u,int v,int c,ll co){//printf("%d -> %d (%d,%lld)\n",u,v,c,co);add(u,v,c,co);add(v,u,0,-co);}const int lim = maxn<<2;int S = maxn-5,T = S+1,l,r,q[lim+10];int flow[maxn],p[maxn];ll dis[maxn],nw_dis;int ans;bool inq[maxn];inline int find(int r,ll w){int l = 0,ret = 0;while(l <= r){int mid = l+r >> 1;if(mid*w+nw_dis >= 0) ret = mid,l = mid+1;else r = mid-1;}return ret;}
#define v G[i].tobool spfa(){memset(dis,-0x3f,sizeof dis);l = 0;r = -1;q[++r] = S;dis[S] = 0;flow[S] = inf;inq[S] = true;while(l <= r){int u = q[l % lim];++l;for(int i = head[u];i;i=G[i].next){if(dis[v] < dis[u] + G[i].cost && G[i].cap){dis[v] = dis[u] + G[i].cost;flow[v] = min(flow[u],G[i].cap);p[v] = i;if(!inq[v]){q[++r % lim] = v;inq[v] = true;}}}inq[u] = false;}if(dis[T] == dis[0]) return false;if(dis[T] < 0) flow[T] = find(flow[T],dis[T]);if(flow[T] == 0) return false;ans += flow[T];nw_dis += flow[T]*dis[T];for(int u = T;u != S;u = G[p[u]^1].to)G[p[u]].cap -= flow[T],G[p[u]^1].cap += flow[T];return true;}
#undef v
}
int main(){int n;read(n);memset(gra::col,-1,sizeof gra::col);for(int i=1;i<=n;++i) read(a[i]);for(int i=1;i<=n;++i) read(b[i]);for(int i=1;i<=n;++i) read(c[i]);for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){if(i == j) continue;if(a[i] % a[j] == 0 && judge(a[i]/a[j])){gra::insert(i,j);}}}for(int i=1;i<=n;++i) if(gra::col[i] == -1) gra::dfs(i,0);for(int u=1;u<=n;++u){if(gra::col[u] == 0){net::insert(net::S,u,b[u],0);for(int i = gra::head[u];i;i=gra::G[i].next){net::insert(u,gra::G[i].to,inf,c[u]*c[gra::G[i].to]);}}else{net::insert(u,net::T,b[u],0);}}while(net::spfa());printf("%d\n",net::ans);getchar();getchar();return 0;
}

转载于:https://www.cnblogs.com/Skyminer/p/6410992.html

bzoj 4514: 数字配对相关推荐

  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. [费用流]数字配对,新生舞会

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

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

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

  6. 4514: [Sdoi2016]数字配对

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

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

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

  8. P4068-[SDOI2016]数字配对【二分,费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P4068 题目大意 nnn种数字,第iii个是aia_iai​,有bib_ibi​个,价值为ci∗cjc_i*c_j ...

  9. bzoj 1237: [SCOI2008]配对(DP)

    1237: [SCOI2008]配对 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1602  Solved: 627 [Submit][Statu ...

  10. BZOJ 1049 数字序列(LIS)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1049 题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增:(2)在( ...

最新文章

  1. Windows XP下,JDK环境变量配置
  2. 【深度学习】像素级分割网络新思路之DeepLabv3+
  3. CVPR 2018 RASNet:《Learning Attentions: Residual Attentional Siamese Network for Tracking》论文笔记
  4. HtmlAgilityPack的简单使用
  5. AntDesign Form表单字段校验的三种方式
  6. Android应用开发—Android 消息处理机制:HandlerMessage
  7. Trick (六)——随机图的构造
  8. Windows命令行工具cmder配置
  9. python(2): If/for/函数/try异常/调试/格式输出%
  10. gromacs ngmx_GROMACS使用教程
  11. 怎么做照片拼图?这几个方法挺靠谱
  12. php 重命名中有斜杠,php如何去除转义字符中的反斜杠
  13. MySQL高可用方案MGR+consul组合测试
  14. 【微信小程序】Java岗面试12家大厂成功跳槽
  15. beego的安装和升级
  16. Anaconda Navigator启动缓慢
  17. 如何使用swing创建一个BeatBox
  18. js上传图片到后端并保存
  19. 【读书、思考、写作】
  20. Java开发基础面试题,Java开发人员不得不收集的代码

热门文章

  1. 重磅推荐:2017 年最流行的 15 个数据科学 Python 库
  2. 特殊时期,找工作的 9 点建议!
  3. 一位读者关于买房的困惑
  4. 基于Ghost框架搭建Blog
  5. mysql基础之mariadb集群主从架构
  6. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-2. 输入控件)...
  7. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)...
  8. @link标签 实现注释里面的类跳转
  9. 如何在数据库中使用索引
  10. (cocos2dx-3.3)3D坐标系