首页 > 其他分享 >【APIO2016】烟火表演

【APIO2016】烟火表演

时间:2023-12-29 21:22:26浏览次数:43  
标签:rt leq int APIO2016 表演 斜率 烟火 tot rc

先前的题目对 slope trick 的认识还不深刻,这题可以看出一个完整的构建过程。

题目描述

给定一棵有根树,根为 \(1\) ,边带权,修改边权的代价时修改值与原值差的绝对值,求让所有叶子到根距离相等的最小代价。

\(1 \leq n \leq 3 \times 10^5,1 \leq w \leq 10^9\) 。

算法解析

首先有朴素 dp,设 \(f_{i,x}\) 为 \(i\) 点子树所有叶子到 \(i\) 距离都为 \(x\) 的最小代价:

\[f_{i,x} = \sum_v \min_{p \leq x} f_{v,p} + |w + p - x| \]

但是复杂度过大,考虑优化,发现 \(f_i(x)\) 看作函数,就是一个下凸函数(不太会证)。

而且每次修改的斜率可能是 \(\Theta(1)\) 的。

这启发我们用 slope trick 做,现在研究被合并到父亲时需要做什么变化:

这里我们想象儿子是一个图像,父亲是一个图像,要将儿子的图像 \(x\) 坐标与父亲对齐后加上去。设 \(x\) 是父亲的横坐标,\(L,R\) 是儿子图像上最低点的左右端。

  • \(x \leq L\) :\(p\) 往左走,\(|w + p - x|\) 最多减小 \(1\) ,但是 \(f_v(p)\) 增加至少 \(1\) ,不优,所以取 \(p = x\) 时最优, 代价是 \(f_{v,x} + w\)。

  • \(L < x \leq L + w\) :发现如果 \(p\) 取 \(L\) 时 \(f_v(p)\) 取最小值,但是 \(x \leq w + p\) ,所以绝对值函数取不到最小值,相应地,要将 \(p\) 往左移一些,但是由于 \(f_v(p)\) 斜率的原因,还是不优,所以 \(p = L\) ,代价是 \(f_{v,L} + (w + L - x)\) 。

  • \(L + w < x \leq R + w\) :\(p = x - w\) 时绝对值和 \(f_v(p)\) 都取最小值,两全其美,代价是 \(f_{v,x - w}\) 。

  • \(x > R + w\) ,同 \(1\) ,无法向右走,\(p = R\) ,所以代价是 \(f_{v,R} + x - R - w\) 。

观察这个图形发生了什么?

众所周知的是,slope trick 中我们存多个拐点代表斜率此时增加 \(1\) 。但是不知道初始值,也就是 \(f_v(0)\) ,如果知道初始值和初始斜率,就可以递推出整段函数值。

所以我们假定我们现在知道初始值和初始斜率,这样后面的就更好理解。

  • 1操作相当于将 \(x \leq L\) 的 \(f_{v,x}\) 部分向上平移 \(w\) ,直接初始值 \(+w\) 即可。

  • 2操作相当于在刚刚的基础上,从 \(x = L\) 开始到 \(x = L + w\) 的一条斜率为 \(-1\) 的直线,由于原来这一段是平的。所以这里斜率为 \(-1\) 。

  • 3操作继承原来最小值,计算发现初始值抬高了 \(w\) ,但是前面那段斜率为 \(-1\) 的直线正好下降了 \(w\) ,所以值直接不变。

  • 4操作相当于在3的基础上,从 \(R + w\) 开始在后面连一条斜率为 \(1\) 的直线,直接删掉后面所有拐点,再加一个即可。

然后要将这个凸壳加到父亲上,这个使用可并堆即可,本文用了左偏树。

具体修改凸壳就是:删掉后面的一些点,在 \(L + w,R + w\) 两处插入两个拐点即可。

至于这个 "一些",儿子每次合并上来,后面会增加一个,所以数儿子数量,合并所有儿子时只留一个斜率 \(+1\) 的射线。

对于 \(f_1(0)\) 的值,发现直接是所有边权的和;初始斜率也好计算,堆的最后一个拐点后斜率为 \(+1\) ,向前推即可。

时间复杂度 \(\Theta(n \log n)\) 。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 6e5 + 5;
struct Heap{
	int lc,rc,val,dis;
}t[N];
int rt[N],n,m,tot = 0,fa[N],C[N],deg[N];
inline int merge(int x,int y)
{
	if(!x || !y) return x + y;
	if(t[x].val < t[y].val) swap(x,y);
	t[x].rc = merge(t[x].rc,y);
	if(t[t[x].rc].dis > t[t[x].lc].dis) swap(t[x].rc,t[x].lc);
	t[x].dis = t[t[x].rc].dis + 1;
	return x;
}
inline int new_node(int v) {++tot; t[tot].lc = t[tot].rc = t[tot].dis = 0; t[tot].val = v; return tot;}
inline void push(int x,int v) {rt[x] = merge(rt[x],new_node(v));}
inline int top(int x) {return t[rt[x]].val;}
inline void pop(int x) {rt[x] = merge(t[rt[x]].lc,t[rt[x]].rc);}
signed main()
{
	cin>>n>>m;
	for(int i = 2;i <= n + m;i++)
	{
		cin>>fa[i]>>C[i];
		deg[fa[i]]++;
	}
	for(int i = n + m;i >= 2;i--)
	{
		int L = 0,R = 0;
		if(i <= n)
		{
			while(--deg[i]) pop(i);
			R = top(i); pop(i);
			L = top(i); pop(i);
		}
		push(i,L + C[i]); push(i,R + C[i]);
		rt[fa[i]] = merge(rt[fa[i]],rt[i]);	
	}
	while(--deg[1]) pop(1);
	pop(1);
	int ans = 0;
	for(int i = 1;i <= n + m;i++) ans += C[i];
	while(rt[1]) ans -= top(1),pop(1);
	cout<<ans;
	return 0;
}

标签:rt,leq,int,APIO2016,表演,斜率,烟火,tot,rc
From: https://www.cnblogs.com/TheLastCandy/p/17935710.html

相关文章

  • 隧道代理HTTP工作原理:一场奇妙的网络魔法表演
    嘿,小伙伴们!今天我们要一起探索一个有趣的话题——隧道代理HTTP的工作原理。这不是普通的表演,而是一场奇妙的网络魔法表演!首先,让我们想象一下,网络世界就像一个大舞台,而我们每个人都是这个舞台上的演员。我们通过电脑、手机等设备与这个舞台进行互动,而隧道代理HTTP就是这场表演的魔术......
  • 羚通视频智能分析平台安防视频监控森林烟火实时监测算法分析
    随着科技的不断进步,人工智能技术在各个领域都得到了广泛的应用。在安防领域,视频监控作为一种常见的应用方式,扮演着重要的角色。然而,传统的视频监控系统往往需要人工进行监控,这不仅效率低下,而且容易出错。为了解决这个问题,羚通视频智能分析平台应运而生,其森林烟火实时监测算法在安防......
  • 羚通视频智能分析平台安防视频监控森林烟火实时监测算法分析
    随着科技的不断进步,人工智能技术在各个领域都得到了广泛的应用。在安防领域,视频监控作为一种常见的应用方式,扮演着重要的角色。然而,传统的视频监控系统往往需要人工进行监控,这不仅效率低下,而且容易出错。为了解决这个问题,羚通视频智能分析平台应运而生,其森林烟火实时监测算法在安......
  • 智慧停车场:AI智能烟火识别算法在停车场的运用
    随着新能源汽车的普及,智慧停车场也越来越多,但由于一些停车场并未进行充电桩改造升级,很多车主私拉电线,大大增加了消防安全隐患。如何保障停车场消防安全,保护居民财产安全?一、方案概述TSINGSEE青犀智能分析网关+EasyCVR视频融合平台,利用烟火识别算法与EasyCVR平台视频监控能力,能在......
  • AI算法在燃气站安全管理中的应用详解,烟火、安全帽、抽烟、打电话检测等
    人工智能(AI)技术在各行各业中的应用越来越广泛,燃气站的安全管理也在逐步引入AI算法。本文将详细介绍AI算法在燃气站安全管理中的应用,包括烟火检测、安全帽识别、抽烟、打电话检测等方面的工作原理。烟火检测是燃气站安全管理中非常重要的一环。AI算法通过图像识别技术,可以实时监测燃......
  • 人间烟火气,最抚凡人心——Only&Home多功能电煮锅
    寒冷的冬季,每当寒风瑟瑟,我们都渴望一份温暖,总想吃些热乎乎的东西,暖心又暖胃。此时,一锅热腾腾的火锅,仿佛是冬日里的暖阳,瞬间驱散了寒冷,让我们沉醉在家的温馨与欢聚的喜悦中,看着锅里咕嘟咕嘟冒泡,热气与香气扑面而来那一刻,真的太幸福啦!为了能在这个冬日里拥有更多美食的乐......
  • 羚通视频智能分析平台安防监控视频平台森林烟火识别明火算法检测预警
    随着科技的不断发展,人工智能技术在各个领域都取得了显著的成果。在安防监控领域,羚通视频智能分析平台凭借其强大的功能和优越的性能,为森林防火工作提供了有力的技术支持。本文将详细介绍羚通视频智能分析平台的森林烟火识别明火算法检测预警功能,以及如何利用这一技术手段保护我们的......
  • 羚通视频智能分析平台安防监控视频平台森林烟火识别明火算法检测预警
    随着科技的不断发展,人工智能技术在各个领域都取得了显著的成果。在安防监控领域,羚通视频智能分析平台凭借其强大的功能和优越的性能,为森林防火工作提供了有力的技术支持。本文将详细介绍羚通视频智能分析平台的森林烟火识别明火算法检测预警功能,以及如何利用这一技术手段保护我们......
  • 羚通视频智能分析平台智能分析技术算法识别烟火检测 火焰识别算法预警
    随着科技的不断发展,人工智能技术已经深入到我们生活的各个角落。其中,视频智能分析技术作为人工智能的重要应用领域,已经在安全防护、环境监测等多个领域发挥了重要作用。今天,我们要介绍的就是羚通视频智能分析平台,它利用先进的智能分析技术算法,实现了烟火检测和火焰识别算法预警,为......
  • 羚通视频智能分析平台AI智能视频分析烟火识别 烟火检测算法预警
    羚通视频智能分析平台是一种创新的解决方案,利用智能视频分析和深度学习技术来实现烟火识别检测的智能算法。这一方案具有多个显著优点,包括高精度检测、实时性强、可扩展性强、智能分析和预警等。这些特性使其能够满足安防监控领域中对烟火检测的需求,从而提高监控效率和安全性。......