根据题意 每个点可以直接与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. 搭建IIS CA DC Exchange TMG SQL (CA DC篇)

    搭建IIS CA DC Exchange TMG SQL (CA DC篇)   步骤 1: 在“下一步(N) > (按下按钮)”(位于“添加角色向导”中)上用户左键单击   步骤 2: 在“Ac ...

  2. 【ARM-Linux开发】arm-none-Linux-gnueabi-gcc下载安装

    arm-none-Linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括 ...

  3. container_of宏

    title: container_of宏 date: 2019/7/24 15:49:26 toc: true --- container_of宏 解析 在linux链表结构中有这样一个宏,通过成员变 ...

  4. SpringBoot:SpringBoot整合JdbcTemplate

    个人其实偏向于使用类似于JdbcTemplate这种的框架,返回数据也习惯于接受Map/List形式,而不是转化成对象,一是前后台分离转成json方便,另外是返回数据格式,数据字段可以通过SQL控制, ...

  5. Reactor系列(九)collect集合

    #java#reactor#collect#collectMap#collectList# 集合 视频讲解: https://www.bilibili.com/video/av79860614/ Fl ...

  6. RSA 非对称加密原理(小白也能看懂哦~)

    来源. https://blog.csdn.net/jijianshuai/article/details/80582187 RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P .Q - 2 ...

  7. (十一)springMvc 异常处理

    文章目录 思路 自定义异常处理类 全局异常处理器 配置全局异常处理器 思路 在 springMvc 中,异常一层一层的往上抛,最后抛给 前端控制器,前端控制器内部会去找 全局异常处理器(一个系统只会有 ...

  8. Zookeeper快速开始

    具体部署流程: #下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5. ...

  9. python--基本语法与变量

    python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑,Python每段代码块缩进的空白数量可以任意,但要确保同段代码块语句必须包含相同的缩进空白数量.建议在代 ...

  10. 编写函数模拟strcpy()函数功能

    strcpy(字符数组1,字符串2) strcpy( )用于将字符串2复制到字符数组1中 /* strcpy(字符数组1,字符串2) strcpy( )用于将字符串2复制到字符数组1中 模拟strcp ...