根据题意 每个点可以直接与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. Linux 之 netstat使用

    netstat介绍 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast ...

  2. Guava源码阅读-collect-Multiset

    package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...

  3. Django--Form组件使用出现的小bug记录--username拿到None

    form过滤代码: class LoginForm(forms.Form): username = forms.CharField(max_length=20,min_length=3,label=' ...

  4. 菜鸟系列Fabric源码学习—创建通道

    通道创建源码解析 1. 与通道创建相关配置及操作命令 主要是configtx.yaml.通过应用通道的profile生成创建通道的配置文件. TwoOrgsChannel: Consortium: S ...

  5. C# lambda查询带返回值

    问题来源: <深入理解C#(第3版)> 11页 具体如下: var lists=new List<string>{"111","222" ...

  6. [OpenBenchMarking] AMD CPU 的性能简单对比

    来源: https://openbenchmarking.org/result/1710193-AL-EPYC7351P64 1. 2. 3. 4.

  7. 关于container_of函数分析

    #include <stdio.h> #define offset_of(type,member) ((int)&(((type *)0)->member)) #define ...

  8. A<=B的前提下全排列A使答案尽量大

    题意:http://codeforces.com/problemset/problem/915/C 举个例子:假使排好序后a字符串是123456,b是456456,按照上述方法遍历,213456 -& ...

  9. CentOS7 PHP cURL errno 35, 原因:CentOS7中没有安装curl和OpenSSL的最新版

    安装OpenSSL的最新版 话不多说,直接上安装步骤 #cd /usr/local/src # 跳过证书获取失败 # wget https://www.openssl.org/source/opens ...

  10. 【静态延迟加载】self关键字和static关键字的区别

    先来看下代码,从代码中发现问题.解决问题 //先实现一个手机工厂类 class Phone{ public static function setBrand(){ echo "Main Ph ...