思路:

懒得写了

http://blog.csdn.net/werkeytom_ftd/article/details/51277482

//By SiriusRen
#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
#define mem(x,y) memset(x,y,sizeof(x))
const int M=,N=,inf=1000000000000000ll;
int n,a[M],b[M],c[M],f[M],jy,T,ans1,ans2;
int edge[N],cost[N],v[N],next[N],first[M];
int with[M],vis[M],minn[M],dis[M],tot;
void Add(int x,int y,int C,int E){edge[tot]=E,cost[tot]=C,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int C,int E){Add(x,y,C,E),Add(y,x,-C,);}
bool tell(){
mem(vis,),mem(minn,0x3f),mem(dis,0x3f);
queue<int>q;q.push(),dis[]=;
while(!q.empty()){
int t=q.front();q.pop(),vis[t]=;
for(int i=first[t];~i;i=next[i])
if(dis[v[i]]>dis[t]+cost[i]&&edge[i]){
dis[v[i]]=dis[t]+cost[i],minn[v[i]]=min(minn[t],edge[i]),with[v[i]]=i;
if(!vis[v[i]])vis[v[i]]=,q.push(v[i]);
}
}return dis[T]<=10000000000000000ll;
}
void zeng(){
for(int i=T;i;i=v[with[i]^])edge[with[i]]-=minn[T],edge[with[i]^]+=minn[T];
ans1+=dis[T]*minn[T];ans2+=minn[T];
}
signed main(){
mem(first,-);
scanf("%lld",&n),T=n+;
for(int i=;i<=n;i++){
scanf("%lld",&a[i]),jy=a[i];
int sqr=sqrt(jy);
for(int j=;j<=sqr;j++)
while(jy%j==)jy/=j,f[i]++;
if(jy!=)f[i]++;
}
for(int i=;i<=n;i++)scanf("%lld",&b[i]),f[i]&?add(,i,,b[i]):add(i,T,,b[i]);
for(int i=;i<=n;i++)scanf("%lld",&c[i]);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i]&&a[j]&&abs(f[j]-f[i])==&&a[i]%a[j]==)
add((f[i]&)?i:j,(f[i]&)?j:i,-c[i]*c[j],inf);
while(tell()){zeng();if(ans1>){if(dis[T])ans2-=(ans1+dis[T]-)/dis[T];printf("%lld\n",ans2);return ;}}
printf("%lld\n",ans2);
}

BZOJ 4514 费用流的更多相关文章

  1. bzoj 3171 费用流

    每个格拆成两个点,出点连能到的点的入点,如果是箭头指向 方向费用就是0,要不就是1,源点连所有出点,所有入点连 汇点,然后费用流 /********************************** ...

  2. bzoj 1449 费用流

    思路:先把没有进行的场次规定双方都为负,对于x胜y负 变为x + 1胜 y - 1 负所需要的代价为 2 * C[ i ] * x  - 2 * D[ i ] * y + C[ i ] + D[ i ...

  3. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

  4. BZOJ 1283 费用流

    思路: 最大费用最大流 i->i+1 连边k 费用0 i->i+m (大于n的时候就连到汇) 连边1 费用a[i] //By SiriusRen #include <queue> ...

  5. bzoj 1070 费用流

    //可以网络流,但是要怎么分配每辆车让谁维修以及维修顺序呢.可以考虑每辆车维修时间对总结果的贡献,把每个修车人拆成n个点共n*m个点, //n辆车连向这n*m个点,流量1,费用k*修车时间,其中k(1 ...

  6. bzoj 2668 费用流

    我们可以把初始状态转化为目标状态这一约束转化为将黑子移动到目标状态所需要的最少步数. 除了初始点和目标点之外,剩下的点如果被经过那么就会被交换两次,所以我们将一个点拆成3个点,a,b,c,新建附加源点 ...

  7. bzoj 2245 费用流

    比较裸 源点连人,每个人连自己的工作,工作连汇,然后因为人的费用是 分度的,且是随工作数非降的,所以我们拆边,源点连到每个人s+1条边 容量是每段的件数,费用是愤怒 /**************** ...

  8. BZOJ 3280 费用流

    思路: 同BZOJ 1221 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> ...

  9. BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)

    BZOJ 洛谷 \(Solution\) 很显然的建二分图后跑最大费用流,但有个问题是一个数是只能用一次的,这样二分图两部分都有这个数. 那么就用两倍的.如果\(i\)可以向\(j'\)连边,\(j\ ...

随机推荐

  1. vue跨域问题解决(生产环境)

    vue跨域问题解决(使用webpack打包的) 配置代理:(config下index.js文件) module.exports = { dev: { env: require('./dev.env') ...

  2. gitlab的添加密钥

    1.在本地电脑下载git的客户端并且安装 2.鼠标右键左面选中Git Bash Here 3.操作如下图生成密钥 4.将密钥复制过来添加到gitLab中 5.Eclipse配置密钥 6.在git创建的 ...

  3. odoo 权限杂记

    最近做一个任务督办模块,涉及到一些权限问题,折磨了几天,终于是解决了. 任务表中关联了hr_employee,分别有默认字段创建人,Many2one的发布人.监督人和Many2many类型的主责人,这 ...

  4. node.js 中的package.json文件怎么创建?

    最近在用webstorm和nodejs做一些东西,老是各种混乱,今天上午创建一个新的项目,结果发现,npm init之后,并没有出现package.json,并没有太明确他的功能的小姑娘表示十分的惊慌 ...

  5. 【[Offer收割]编程练习赛12 D】 寻找最大值

    [题目链接]:http://hihocoder.com/problemset/problem/1496 [题意] [题解] 先把这n个数排个序吧. 这样相邻的数字就在一起了; 这样a[i]&a ...

  6. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  7. Leetcode 41.缺失的第一个正数

    缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: ...

  8. angular的又一本好书

    MANNING出的<ANGULAR.JS IN ACTION>. 比上本看完的书<ANGULAR ESSENTIAL>多了一些有全局性的东东. 八个关键概念:MODULE,CO ...

  9. nyoj_218_Dinner_201312021434

    Dinner 时间限制:100 ms  |           内存限制:65535 KB 难度:1   描述 Little A is one member of ACM team. He had j ...

  10. hdu_2925_Musical Chairs_201311121643

    Musical Chairs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...