【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
好像正常的做法是建二分图?
我的是拆点然后
S->i cap=b[i] cost=0
i'->T cap=b[i] cost=0
然后能匹配的两点i,j 连 i->j' cap=inf cost=c[i]*c[j]
跑最大费用流,直到 cost<0 或 全部增广完
最后flow/2就是答案
/* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std; #define ll long long
const ll inf=1e18;
const int N=1e5+;
struct edge{
int from,next,to;
ll v,c;
}e[N];
int first[N],pr[N],prime[N],inq[N],lst[N];
ll A[N],B[N],C[N],dis[N],minf[N];
int S=,T=,ade=,P,n;
queue <int> Q; void addedge(int x,int y,ll v,ll c){
e[++ade].to=y;
e[ade].from=x;
e[ade].next=first[x];
e[ade].v=v;
e[ade].c=c;
first[x]=ade;
} void ADE(int x,int y,ll v,ll c){
addedge(x,y,v,c);
addedge(y,x,-v,);
} void Prime(){
for (int i=;i<;i++) prime[i]=;
for (int i=;i<;i++){
if (prime[i]){
pr[++pr[]]=i;
for (int j=i+i;j<;j+=i) prime[j]=;
}
}
} bool check(ll x){
if (x==) return ;
for (int i=;i<=pr[] && pr[i]<x ;i++) if (!(x%pr[i])) return ;
return ;
} #define s e[x].to
#define v e[x].v
#define cap e[x].c
#define Cap e[x^1].c
bool SPFA(ll &mf,ll &mc){
for (int i=;i<=n*+;i++) dis[i]=-inf,minf[i]=inf;
Q.push(S),inq[S]=,dis[S]=;
while (!Q.empty()){
int p=Q.front();
Q.pop(),inq[p]=;
for (int x=first[p];x;x=e[x].next){
if (dis[s]<dis[p]+v && cap>){
dis[s]=dis[p]+v;
lst[s]=x;
minf[s]=min(minf[p],cap);
if (!inq[s]) Q.push(s),inq[s]=;
}
}
}
if (dis[T]==-inf) return ;
for (int x=lst[T];x;x=lst[e[x].from]) {cap-=minf[T],Cap+=minf[T];}
mf+=minf[T];
mc+=dis[T]*minf[T];
if (mc<){
mf-=mc/dis[T]+(mc%dis[T]!=);
return ;
}
return ;
} void mcmf(){
ll mf=,mc=;
while (SPFA(mf,mc));
printf("%lld\n",mf/);
}
#undef s
#undef v
#undef c
#undef C int main(){
Prime();
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lld",&A[i]);
for (int i=;i<=n;i++) scanf("%lld",&B[i]);
for (int i=;i<=n;i++) scanf("%lld",&C[i]);
for (int i=;i<=n;i++){
ADE(S,i+,,B[i]);
ADE(i+n+,T,,B[i]);
for (int j=;j<=n;j++){
if (A[i]>A[j] && A[i]%A[j]==){
if (check(A[i]/A[j])){
ADE(i+,j+n+,C[i]*C[j],inf);
ADE(j+,i+n+,C[i]*C[j],inf);
}
}
}
}
mcmf();
return ;
}
【bzoj4514】: [Sdoi2016]数字配对 图论-费用流的更多相关文章
- bzoj4514: [Sdoi2016]数字配对(费用流)
传送门 ps:费用流增广的时候费用和流量打反了……调了一个多小时 每个数只能参与一次配对,那么这就是一个匹配嘛 我们先把每个数分解质因数,记质因子总个数为$cnt_i$,那如果$a_i/a_j$是质数 ...
- BZOJ4514 [Sdoi2016]数字配对 【费用流】
题目 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×c ...
- BZOJ4514[Sdoi2016]数字配对——最大费用最大流
题目描述 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci ...
- 【BZOJ4514】数字配对(费用流)
题意: 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci× ...
- [SDOI2016]数字配对(费用流+贪心+trick)
重点是如何找到可以配对的\(a[i]\)和\(a[j]\). 把\(a[i]\)分解质因数.设\(a[i]\)分解出的质因数的数量为\(cnt[i]\). 设\(a[i]\geq a[j]\) 那么\ ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- bzoj4514: [Sdoi2016]数字配对--费用流
看了一眼题目&数据范围,觉得应该是带下界的费用流 原来想拆点变成二分图,能配对的连边,跑二分图,可行性未知 后来看到另外一种解法.. 符合匹配要求的数要满足:质因子的个数相差为1,且两者可整除 ...
- bzoj4514 [Sdoi2016]数字配对
Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...
- bzoj4514 [Sdoi2016]数字配对(网络流)
Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...
随机推荐
- 使用原生js自定义内置标签
使用原生js自定义内置标签 效果图 代码 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- 2014.8.25 VS新建项目模板消失解决方法
Vs2005 新建项目时windows应用程序模板消失问题解决方法: 1:进入C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\ ...
- 使用JAVA爬取博客里面的所有文章
主要思路: 1.找到列表页. 2.找到文章页. 3.用一个队列来保存将要爬取的网页,爬取队头的url,如果队列非空,则一直爬取. 4.如果是列表页,则抽取里面所有的文章url进队:如果是文章页,则直接 ...
- Unity调试设置
[Unity调试设置] 1.Mac中,"Unity"->"Preferences...". Windows中,"Edit"->& ...
- python小程序:备份文件
设计程序,有以下步骤: 需要备份的文件和目录由一个列表指定. 备份应该保存在主备份目录中. 文件备份成一个zip文件. zip存档的名称是当前的日期和时间. 解决方案: 版本一: #!/usr/bin ...
- hook NtQueryDirectoryFile实现文件隐藏
一.NtQueryDirectoryFile函数功能(NT系列函数) NtQueryDirectoryFile函数:在一个给定的文件句柄,该函数返回该文件句柄指定目录下的不同文件的各种信息. 根据传入 ...
- UCOSII在STM32F407上的移植
1.ucosii移植准备工作 1.1准备基础工程: 移植的时候需要一个基础工程,为了方便起见我们就选取跑马灯实验,作为ucossii移植的基础工程. 1.2Ucossii源码: 1)Micrium官网 ...
- 使用jQuery完成表单验证
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>注 ...
- Django-Web框架之创建项目和应用
Django我们是基于python3来演示的.首先我们来安装一下django框架.使用pip3 install django安装的是最新的版本: 我们在pycharm中创建django工程.如图所示: ...