「SNOI2019」通信 分治建图

根据题意 每个点可以直接与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」通信 分治建图的更多相关文章
- 「SNOI2019」通信 分治优化费用流建图
题意: n 个排成一列的哨站要进行通信.第 i 个哨站的频段为 ai. 每个哨站 ii 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W:2.连接到前面的某个哨站 j(j<i),代价为 ...
- 【LOJ】#3097. 「SNOI2019」通信
LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成 ...
- 「SNOI2019」通信
题目 还好我没生在陕西啊 首先发现这个题不能\(dp\),数据范围不大,好像一种网络流的样子啊 哎等等,这样向后面连边不是一个\(DAG\)吗,这不是最小权路径覆盖的板子吗 于是我们套路的拆点,对于一 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- 【LOJ】#3098. 「SNOI2019」纸牌
LOJ#3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压\((j,k)\)为有\(j\)个连续两个的,有\(k\)个连续一个的 如果当前有\(i\ ...
- 【LOJ】#3096. 「SNOI2019」数论
LOJ#3096. 「SNOI2019」数论 如果\(P > Q\)我们把\(P\)和\(Q\)换一下,现在默认\(P < Q\) 这个时候每个合法的\(a_i\)都可以直接落到\(Q\) ...
- 【LOJ】#3095. 「SNOI2019」字符串
LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i ...
- 2090. 「ZJOI2016」旅行者 分治,最短路
2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid+1,r)\).考虑跨过mid的贡献. 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(g ...
- 「JLOI2011」「LuoguP4568」飞行路线(分层图最短路
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...
随机推荐
- admin源码分析
django settings 源码分析 导入settingso模块,进入源码,会发现settings是一个 单例 LazySettings类实例化产生的一个对象,LazySettings实例化后就会 ...
- Galileo:一款开源Web应用审计框架
转载自FreeBuf.COM Galileo是一款针对Web应用程序的开源渗透测试工具,可帮助开发和渗透测试人员识别并利用其Web应用程序中的漏洞. 截图 安装 $ git clone https:/ ...
- Unstanding LSTM
1.RNNs 我们可以把RNNs看成一个普通网络做多次复制后叠加在一起组合起来,每一个网络都会把输出传递到下一个网络中. 把RNNs按时间步上展开,就得到了下图: 从RNNs链状结构可以容易理解到他是 ...
- linux 怎样关闭x server?
如果想切换至纯粹一点的命令字符console下,一般人会认为切换Ctrl+Alt+F1(或者F2-F6都可以). 默认下,Ctrl+Alt+F7是图形界面(当然,各个Linux发行版本会有所差异). ...
- Own MusicPlayer隐私策略
本地音乐播放器 此为Own MusicPlayer本地音乐播放器的隐私策略,本隐私策略内容会不定期更新,以最新内容为主. 若您已经阅读并了解以下内容后,并继续使用该软件,即表示您已同意该协议. 访问权 ...
- jumpserver0.4.0与python3版本安装
环境: 系统:CentOS 6.5 Python版本:Python3.6 安装目录:/Data/apps/ 一. 环境准备: 1. 基本工具库: # yum -y install sqlite-de ...
- CentOS7 PHP cURL errno 35, 原因:CentOS7中没有安装curl和OpenSSL的最新版
安装OpenSSL的最新版 话不多说,直接上安装步骤 #cd /usr/local/src # 跳过证书获取失败 # wget https://www.openssl.org/source/opens ...
- Python list,tuple,dict,set高级变量常用方法
list列表 增加 append 在列表中追加,一次只能加一个 insert 按索引插入,一次只能插一个 extend 迭代追加到列表中 list1 = [1, 2, 3] list2 = [4, 5 ...
- MongoDB环境搭建
MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...
- (转)查找算法:二叉排序树(BSTree)
二叉排序树(Binary Sort Tree),又称为二叉查找树(Binary Search Tree) ,即BSTree. 构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除的 ...