根据题意 每个点可以直接与S,T相连 也可以和前面的哨站相连 暴力建边的话 有n2条边

要用分治优化建边:

类似于归并排序 先对每一层分为左半边与右半边 对每一半都拿出来先排序去重后 直接排成一条链建边

if (l == r) {
return ;
}
int mid = (l + r) >> ;
solve(l, mid), solve(mid + , r);
int cnt = ;
for (int i = l; i <= r; i++) {
aa[++cnt] = a[i];
}
sort(aa + , aa + + cnt);
cnt = unique(aa + , aa + cnt + ) - aa - ;
int now = MCMF::MAXP;
for (int i = ; i < cnt; i++) {
MCMF::addedge(now + i, now + i + , inf, aa[i + ] - aa[i]);
MCMF::addedge(now + i + , now + i, inf, aa[i + ] - aa[i]);
}

然后对于区间内的每个数 前半边的出后半边的入

        for (int i = l; i <= r; i++) {
int aim = lower_bound(aa + , aa + cnt + , a[i]) - aa;
if (i <= mid) {
MCMF::addedge(now + aim, i + n, , );
} else {
MCMF::addedge(i, now + aim, , );
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long long JQK;
const int inf = INT_MAX / ;int n, a[], aa[];
void solve(int l, int r) {
if (l == r) {
return ;
}
int mid = (l + r) >> ;
solve(l, mid), solve(mid + , r);
int cnt = ;
for (int i = l; i <= r; i++) {
aa[++cnt] = a[i];
}
sort(aa + , aa + + cnt);
cnt = unique(aa + , aa + cnt + ) - aa - ;
int now = MCMF::MAXP;
for (int i = ; i < cnt; i++) {
MCMF::addedge(now + i, now + i + , inf, aa[i + ] - aa[i]);
MCMF::addedge(now + i + , now + i, inf, aa[i + ] - aa[i]);
}
for (int i = l; i <= r; i++) {
int aim = lower_bound(aa + , aa + cnt + , a[i]) - aa;
if (i <= mid) {
MCMF::addedge(now + aim, i + n, , );
} else {
MCMF::addedge(i, now + aim, , );
}
}
MCMF::MAXP += cnt;
}
int main() {
int x;
int s, t;
ll W;
RR(n), RR(x);
W = x;
MCMF::MAXP = * n + , s = * n + , t = * n + ;
for (int i = ; i <= n; i++) {
RR(a[i]);
MCMF::addedge(s, i, , ), MCMF::addedge(i, t, , W), MCMF::addedge(i + n, t, , );
}
solve(, n);
MCMF::init(s, t);
cout << MCMF::MCMF() << "\n";
return ;
}

「SNOI2019」通信 分治建图的更多相关文章

  1. 「SNOI2019」通信 分治优化费用流建图

    题意: n 个排成一列的哨站要进行通信.第 i 个哨站的频段为 ai. 每个哨站 ii 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W:2.连接到前面的某个哨站 j(j<i),代价为 ...

  2. 【LOJ】#3097. 「SNOI2019」通信

    LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成 ...

  3. 「SNOI2019」通信

    题目 还好我没生在陕西啊 首先发现这个题不能\(dp\),数据范围不大,好像一种网络流的样子啊 哎等等,这样向后面连边不是一个\(DAG\)吗,这不是最小权路径覆盖的板子吗 于是我们套路的拆点,对于一 ...

  4. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  5. 【LOJ】#3098. 「SNOI2019」纸牌

    LOJ#3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压\((j,k)\)为有\(j\)个连续两个的,有\(k\)个连续一个的 如果当前有\(i\ ...

  6. 【LOJ】#3096. 「SNOI2019」数论

    LOJ#3096. 「SNOI2019」数论 如果\(P > Q\)我们把\(P\)和\(Q\)换一下,现在默认\(P < Q\) 这个时候每个合法的\(a_i\)都可以直接落到\(Q\) ...

  7. 【LOJ】#3095. 「SNOI2019」字符串

    LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i ...

  8. 2090. 「ZJOI2016」旅行者 分治,最短路

    2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid+1,r)\).考虑跨过mid的贡献. 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(g ...

  9. 「JLOI2011」「LuoguP4568」飞行路线(分层图最短路

    题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...

随机推荐

  1. 启动Nginx 出现 nginx: [emerg] unknown directive "锘?user" 错误

    出现这种情况 一般是修改配置文件 nginx.conf 造成的 如果你修改文件后出现 那基本上就是这个原因 启动不了 重新打开 改为UTF-8 无BOM编码

  2. jQuery UI Widget(1.8.1)工作原理

    /*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual l ...

  3. linux基础命令笔记

    配置IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 忘记root密码grub e 选择kernel按e 输入single b 1:目录及文件的基本操 ...

  4. 前端手势控制图片插件书写二(transform矩阵的原理)

    上次解释了如何使用代码识别双指和单指操作及放大和旋转拖动操作.这次解释下css3的transform原理 一.transform矩阵原理 transform: matrix(a,b,c,d,e,f) ...

  5. nginx 开启gzip压缩

    Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度,!  Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于 ...

  6. CentOS7 安装mysql(YUM源方式)

    1.下载mysql源安装包 $ wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm   2.安装mysql ...

  7. 【Python】【demo实验36】【基础实验】【求3*3矩阵的主对角线之和】

    题目: 求一个3*3矩阵主对角线元素之和. 主对角线:从左上多右下的书归为主对角线 副对角线:从左下至右上的数归为副对角线. 我的源码: #!/usr/bin/python # encoding=ut ...

  8. SpringBoot 对IBM MQ进行数据监听接收以及数据发送

    一.需求介绍 后端使用Spring Boot2.0框架,要实现IBM MQ的实时数据JMS监听接收处理,并形成回执通过MQ队列发送. 二.引入依赖jar包 <dependency> < ...

  9. windows scala helloworld例子详解

    [学习笔记] windows scala helloworld例子详解: 在操作系统中,我们的Test3.scala会生成Test3.class,然后class文件被虚拟机加载并执行, 这一点和jav ...

  10. DeepMind提出新型超参数最优化方法:性能超越手动调参和贝叶斯优化

    DeepMind提出新型超参数最优化方法:性能超越手动调参和贝叶斯优化 2017年11月29日 06:40:37 机器之心V 阅读数 2183   版权声明:本文为博主原创文章,遵循CC 4.0 BY ...