【LOJ#3097】[SNOI2019]通信(费用流)

题面

LOJ

题解

暴力就直接连\(O(n^2)\)条边。
然后分治/主席树优化连边就行了。
抄zsy代码,zsy代码是真的短

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 50000
const int inf=1e9;
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
struct Line{int v,next,w,fy;}e[1000000];
int h[MAX],cnt=2;
inline void Add(int u,int v,int w,int fy)
{e[cnt]=(Line){v,h[u],w,fy};h[u]=cnt++;e[cnt]=(Line){u,h[v],0,-fy};h[v]=cnt++;
}
int S=0,T=0,tot;
ll dis[MAX],vis[MAX],TIM;
bool Update()
{ll mn=1e18;for(int u=0;u<=tot;++u)if(vis[u]==TIM)for(int i=h[u];i;i=e[i].next)if(e[i].w&&vis[e[i].v]!=TIM)mn=min(mn,dis[e[i].v]+e[i].fy-dis[u]);if(mn>=inf)return false;for(int u=0;u<=tot;++u)if(vis[u]==TIM)dis[u]+=mn;return true;
}
ll Flow,Cost;
int dfs(int u,int flow)
{if(u==T||!flow){Flow+=flow;Cost+=dis[S]*flow;return flow;}int ret=0;vis[u]=TIM;for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(vis[v]!=TIM&&e[i].w&&dis[v]==dis[u]-e[i].fy){int d=dfs(v,min(flow,e[i].w));flow-=d;ret+=d;e[i].w-=d;e[i^1].w+=d;if(!flow)break;}}return ret;
}
void ZKW()
{dodo++TIM;while(dfs(S,inf));while(Update());
}
int n,W,a[MAX];
int p[MAX];
void Link(int l,int r)
{if(l==r)return;int mid=(l+r)>>1;Link(l,mid);Link(mid+1,r);int t=0;for(int i=l;i<=r;++i)p[++t]=a[i];sort(&p[1],&p[t+1]);t=unique(&p[1],&p[t+1])-p-1;for(int i=1;i<t;++i){Add(tot+i,tot+i+1,inf,p[i+1]-p[i]);Add(tot+i+1,tot+i,inf,p[i+1]-p[i]);}for(int i=l;i<=r;++i){int q=lower_bound(&p[1],&p[t+1],a[i])-p;if(i<=mid)Add(tot+q,i+n,1,0);else Add(i,tot+q,1,0);}tot+=t;
}
int main()
{n=read();W=read();for(int i=1;i<=n;++i)a[i]=read();S=n+n+1;T=n+n+2;tot=n+n+2;for(int i=1;i<=n;++i)Add(S,i,1,0),Add(i,T,1,W),Add(i+n,T,1,0);Link(1,n);ZKW();printf("%lld\n",Cost);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/10790579.html

【LOJ#3097】[SNOI2019]通信(费用流)相关推荐

  1. Gym 101190D BZOJ 4842 Luogu P6967 LOJ #6071 [NEERC2016]Delight for a Cat (费用流)

    题目链接 (BZOJ) 大人,时代变了 (Gym) https://codeforces.com/gym/101190 (Luogu) https://www.luogu.com.cn/problem ...

  2. LOJ 2979 「THUSCH 2017」换桌——多路增广费用流

    题目:https://loj.ac/problem/2979 原来的思路: 优化连边.一看就是同一个桌子相邻座位之间连边.相邻桌子对应座位之间连边. 每个座位向它所属的桌子连边.然后每个人建一个点,向 ...

  3. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]

    题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...

  4. [费用流] LOJ#545. 「LibreOJ β Round #7」小埋与游乐场

    有两种操作是有效的 lowbit(ai)>lowbit(bj)lowbit(ai)>lowbit(bj)lowbit(a_i)>lowbit(b_j) 或者 ai=bjai=bja_ ...

  5. [网络流24题] 航空路线问题 (费用流)

    洛谷传送门 LOJ传送门 这道题的图还挺好想的吧 反正都是无向边,起点走到终点再回到起点,就相当于从起点走$2$次到达终点,且这两次不经过相同的点,还要经过尽可能多的点 很经典的费用流建图 限制点通过 ...

  6. LP对偶费用流 TopCoder SRM 676 div1 Farmville(最大费用循环流,对偶原理)

    感觉这个年代已经没有人对对偶感兴趣了. 对偶原理与线性规划详见2016集训队论文(没看过而且不知道什么是对偶的可能看不懂我这博客在讲什么) maximizecTxs.t.Ax≤bx≥0\begin{a ...

  7. [BZOJ2879][Noi2012]美食节(费用流)

    Address 洛谷P2050 BZOJ2879 LOJ#2674 Solution 一看发现和 SCOI2007 修车 是一样的. 这里再说一下建图: 把每个厨师拆成 ∑ i = 1 n p i \ ...

  8. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  9. 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]

    题目链接 题目大意: 就是给你一个nnn个点mmm条边的无向图,每个点有个值是aia_iai​现在你把每条边都赋予一个方向之后这个图就是有向图了,那么设第iii个点的入度是did_idi​,现在设 D ...

  10. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

最新文章

  1. 泼点冷水,P2P借款限额是不是想的太美好?
  2. docker监控系统
  3. JAVA 学到什么水平就可以转战 Android 了?
  4. 几行代码,网盘链接提头来见!
  5. Xmanager远程桌面教程
  6. C#事件中的两个参数(object sender,EventArgs e)
  7. Java基础中按值传递和引用传递详解
  8. 睡前小故事之MySQL起源
  9. 六.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---4.laserMapping.cpp--后端建图和帧位姿精估计(优化)
  10. MySQL分页查询中该避开的坑
  11. mysql查看已打开文件数_[MySQL FAQ]系列 -- mysql如何计算打开文件数
  12. Ubuntu下安装使用Monaco字体
  13. 【软件设计师考试】《软件设计师教程》(一)
  14. JavaCV的摄像头实战之五:推流
  15. 半导体物理实验MatLab,Matlab在固体物理中的应用程序.doc
  16. 革命性的超级WiFi - 电视白空间解释说
  17. DES加密解密算法(简单、易懂、超级详细)
  18. 互联网日报 | 华为鸿蒙OS 2.0正式发布;微信小程序日活用户超4亿;百胜中国回港上市首日破发...
  19. ORACLE EBS常用表
  20. 【Java】实现统计字符串中大写、小写、数字字符出现次数

热门文章

  1. 80004005错误代码_0x80004005,教您0x80004005错误代码解决方法
  2. 方差为什么用平方不用绝对值,为什么要对差值求平方而不是取标准偏差的绝对值?...
  3. 电磁场与电磁波公式总结
  4. Zeppelin的求学之路(1)—— 简介 和 从源码Build的安装并配置他的Spark解析器
  5. android 8.0图标适配
  6. 高级数理逻辑试卷参考答案
  7. matlab 求信号频率响应,频率响应 - MATLAB Simulink - MathWorks 中国
  8. 计算机登录界面没有用户显示不出来,win7让administrator账户不出现在登陆界面方法...
  9. 阿里达摩院做AI这两年
  10. Matlab处理阻尼振动数据,MATLAB计算方法和技巧6_2阻尼振动