【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 是一个质数, 那么这两个数字可以配对 ...
随机推荐
- Patator-一款很好用的爆破工具
项目地址:https://github.com/lanjelot/patator 打开文件夹 运行一下文件查看帮助 python patator.py --help 这里有很多的爆破选项,就不一一截图 ...
- 解决git gnutls_handshake失败
sudo apt-get install build-essential fakeroot dpkg-dev mkdir ~/git-openssl cd ~/git-openssl sudo apt ...
- 初学Python--列表(List)
1.索引 列表中的元素类型未必统一,如: listExample=[1,2,'a','b'] 元素下标索引以0开始 firstEle=listExample[0] 不能进行越界索引,但可以倒序索引 l ...
- 前端学习笔记一:什么是W3C?
俗话说好记性不如烂笔头,最近在学习前端技术,一些理论性的知识虽然理解,但有时确不能精准的用语言表述出来,那就索性记下来吧,以备以后时常查看: 我们平时说的W3C,其实是World Wide Web C ...
- android获取mp4视频文件总时长和视频宽高<转>
android使用 MediaMetadataRetriever 获取视频文件的 总时长 和视频的分辨率. 根据该方式获取视频信息可以看出不仅仅可以获取时长和分辨率,还能获取到其他的一些视频信息,不错 ...
- HDR
[HDR] 什么是 HDR? 高动态范围拍摄(HDR)现在已经得到广泛使用,被用来补偿大多数数码成像传感器有限的动态范围.照片的动态范围是指最暗的色彩与最亮的色彩之间的亮度范围——也可以一并表示色调范 ...
- 国庆前执行更新承诺SO交期 FP_SO2SAP
每年9月20日到30号执行以下程序:创建日期为昨天的订单,且承诺交期为10月1到3号,则承诺交期需加7天:创建日期为昨天的订单, 承诺交期为4号到11月1日,承诺交期需加4天 存储过程:FP_SO2S ...
- 【bzoj1444】[Jsoi2009]有趣的游戏
1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1007 Solved: 334[Submit][Statu ...
- Mask_RCNN openpose AlphaPose Kinect姿态识别
1.Mask_RCNN ---------------------------------------------------------------------------------------- ...
- Java Http 请求
package zr.weixin.com.utils; import java.io.BufferedReader; import java.io.IOException; import java. ...