【GDOI2018模拟9.14】通信

智能汽车竞赛摄像头处理(4)——摄像头循迹思路讲解 智能汽车竞赛摄像头处理(4)对摄像头循迹思路进行讲解。 阅读详情

Description:

这里写图片描述
1<=n<=105

题解:

比赛没有仔细想,码了个n2暴力,结果还被卡常了。
暴力思路如下:
先枚举根为x,依次加入x+1,x+2,x+3……,加入一个点y(y>x)时,如果它的子树中没有已经加入的点,那么它就会使距离增大,再暴力往上跳,给它的祖先打上标记,直到到某个点,这个点已经被打上标记就可以停止了,同时可以算出增加的距离。
感觉这个思路很想GDOI-2017-D1-T2那种,因为每个点只会被打上一次标记,所以复杂度可以保证。

然而我忽略了这种树上和边有关的计数类问题必须要想到一种思路:对每条边的贡献单独考虑。

我们可以枚举一条边,给这条边分成的两个集合的点黑白染色,再反映到1-n的序列上。
这条边的贡献等于n∗(n+1)/2−∑s∗(s+1)/2,其中s是各个连续相同颜色块的长度。

当然我们也可以随便选择一个根建树,对于每条边,只给它的深度大的端点的子树染色,利用线段树就可以直接求答案了。

既然是给子树染色,那么树上启发式用可以用上了。

老套路:先搞轻儿子,清空线段树,再搞重儿子,保留线段树,再暴力把轻儿子的子树和自己加进线段树,最后判断是否子树在线段树里的东西。

撤销操作就暴力染回去。

时间复杂度:O(n log n log n)

Code:

#include<cstdio>
#include<cstring>
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define sqr(a) ((a) * (a + 1) / 2)
using namespace std;

const int N = 100005;
const ll mo = 1e9 + 7;

int n, x, y;
int final[N], tot;
struct edge {
    int to, next;
}e[N * 2];
int fa[N], bz[N], siz[N], son[N];
ll ans;

ll ksm(ll x, ll y) {
    ll s = 1;
    for(; y; x = x * x % mo, y >>= 1)
        if(y & 1) s = s * x % mo;
    return s;
}

struct tree {
    int l, r; ll sl, sr, s;
}t[N * 10];

void link(int x, int y) {
    e[++ tot].next = final[x], e[tot].to = y, final[x] = tot;
    e[++ tot].next = final[y], e[tot].to = x, final[y] = tot;   
}

void dg(int x) {
    bz[x] = 1;
    siz[x] = 1;
    for(int i = final[x]; i; i = e[i].next) {
        int y = e[i].to; if(bz[y]) continue;
        fa[y] = x; dg(y); siz[x] += siz[y];
        son[x] = siz[y] > siz[son[x]] ? y : son[x];
    }
    bz[x] = 0;  
}

void Bin(int i, int l, int r) {
    int x = i + i, y = i + i + 1;
    int m = (l + r) / 2;
    t[i].l = t[x].l; t[i].r = t[y].r;
    t[i].s = t[x].s + t[y].s;
    if(t[x].r == t[y].l) t[i].s -= sqr(t[x].sr) + sqr(t[y].sl) - sqr(t[x].sr + t[y].sl);
    if(t[x].r == t[y].l && t[x].sl == (m - l + 1))
        t[i].sl = t[x].sl + t[y].sl; else t[i].sl = t[x].sl;
    if(t[x].r == t[y].l && t[y].sl == (r - m))
        t[i].sr = t[y].sr + t[x].sr; else t[i].sr = t[y].sr;
}

void Build(int i, int x, int y) {
    if(x == y) {
        t[i].s = 1;
        t[i].l = t[i].r = 0;
        t[i].sl = t[i].sr = 1;
        return;
    }
    int m = (x + y) / 2;
    Build(i + i, x, m); Build(i + i + 1, m + 1, y);
    Bin(i, x, y);
}

void change(int i, int x, int y, int l, int r) {
    if(x == y) {
        t[i].s = 1;
        t[i].l = t[i].r = r;
        t[i].sl = t[i].sr = 1;
        return;
    }
    int m = (x + y) / 2;
    if(l <= m) change(i + i, x, m, l, r); else change(i + i + 1, m + 1, y, l, r);
    Bin(i, x, y);
}

void dfs(int x) {
    bz[x] = 1;
    change(1, 1, n, x, 1);
    for(int i = final[x]; i; i = e[i].next) {
        int y = e[i].to; if(bz[y]) continue;
        dfs(y);
    }
    bz[x] = 0;  
}

void Clear(int x) {
    change(1, 1, n, x, 0);
    bz[x] = 1;
    for(int i = final[x]; i; i = e[i].next) {
        int y = e[i].to; if(bz[y]) continue;
        Clear(y);
    }
    bz[x] = 0;
}


void dg1(int x) {
    bz[x] = 1;
    for(int i = final[x]; i; i = e[i].next) {
        int y = e[i].to; if(bz[y] || y == son[x]) continue;
        dg1(y);
    }
    if(son[x]) dg1(son[x]);
    for(int i = final[x]; i; i = e[i].next) {
        int y = e[i].to; if(bz[y] || y == son[x]) continue;
        dfs(y);
    }
    change(1, 1, n, x, 1);
    ans += (ll)n * (n + 1) / 2 - t[1].s;
    if(son[fa[x]] != x) Clear(x);
    bz[x] = 0;  
}

int main() {
    freopen("communicate.in", "r", stdin);
    freopen("communicate.out", "w", stdout);
    scanf("%d", &n);
    fo(i, 1, n - 1) {
        scanf("%d %d", &x, &y);
        link(x, y);
    }
    dg(1);
    Build(1, 1, n);
    dg1(1);
    ans = ans * 2 % mo * ksm((ll)n * (n + 1) / 2, mo - 2) % mo;
    printf("%lld", ans);
}
从询价到回款:一篇讲透 SAP SD 销售与分销的实战入门指南 摘要: SAP SD(Sales and Distribution)模块是SAP ERP中管理销售与分销的核心组件,贯穿从订单到回款(Order-to-Cash)的全流程。其核心价值在于将销售业务结构化,通过主数据(客户、物料、定价)和交易单据(订单、交货、发票)实现流程可审计、可自动化。SD模块与物流(MM)、生产(PP)、财务(FI)深度集成,涵盖定价策略、信用控制、发运管理、国际贸易等复杂场景。关键设计包括条件技术(Condition Technique)实现灵活定价,单据流(Document Flo 阅读详情

相关推荐

VN1630A硬件配置指南:手把手教你用CanApe搭建XCP标定工程(附ELF文件配置技巧)

本文详细介绍了如何使用VN1630A硬件和CanApe软件搭建XCP标定工程,包括硬件配置、CanApe工程创建、ELF文件处理及XCP协议层配置等关键步骤。特别针对实际项目中常见的错误和细节问题提供解决方案,帮助工程师高效完成ECU参数标定工作。

git9versioner的博客 1156

JZOJ5365. 【GDOI2018模拟9.14】通信 线段树+重链剖分

我们考虑每条边的贡献。 把已经走过的点染色为1,未走过的为0,那么我们对于序号序列维护一颗线段树,x-v这条边的贡献就是序列中不连续01序列包含x的个数,那么我们反过来,答案=总序列-经过x的极大连续序列,这个东西明显可以用线段树维护,维护一个从左右开始的最长01长度和最长连续就好了。 问题是直接遍历操作明显会T,我们重链剖分一下,对于一个点,先把其他的轻儿子暴力扫掉,然后再递归处理重儿子。

老臣 652

单细胞分析避坑指南:你的Harmony批次矫正真的做对了吗?

本文深入探讨了单细胞转录组分析中Harmony批次矫正的正确使用方法,解析了其工作原理及常见误区。通过详细参数调优指南和实战案例,帮助研究者避免过度矫正,确保生物学信号的有效保留。特别关注Harmony在单细胞数据分析中的关键参数设置和结果验证方法。

weixin_31099291的博客 299

jzoj5365 【GDOI2018模拟9.14】通信 线段树合并

Description 给定一棵树,求∑i=1n∑j=indis(i,j)+∑k=i+1jdis(k−1,k)(n2)\dfrac{\sum\limits_{i=1}^n\sum\limits_{j=i}^n{dis(i,j)+\sum\limits_{k=i+1}^j{dis(k-1,k)}}}{\binom{n}{2}}(2n​)i=1∑n​j=i∑n​dis(i,j)+k=i+1∑j​di...

olahiuj的博客 368

ABAP 7.40+新语法实战:用VALUE和REDUCE五分钟搞定复杂内表统计

本文详细介绍了ABAP 7.40+新语法中的VALUE和REDUCE操作符,如何高效处理复杂内表统计任务。通过实战案例展示,这些新语法能将代码量减少70%以上,显著提升开发效率和可读性,特别适合大数据量下的销售数据分析、分组统计等场景。

weixin_27219587的博客 206

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

JZOJ5522.【GDOI2018模拟】A

Description SOLUTION 我们假设一个点的贡献为右边小于它的点的个数 当有一个操作x,对于所有x&amp;lt;y a[x]&amp;gt;a[y]的y,y的贡献就变成了0. a[x]&amp;lt;=a[y]的y,由于小于a[x](即小于a[y])的数只是排序换位置,y的贡献不变。 因此每一个位置只会受在它前面的询问并权值大于它的点的影响,并变为0(所以排序什么的都是骗人的) 所以我们可以考虑...

Deep_Thinking的博客 281

从专利库到Zemax:一个6mm定焦镜头从零到交付的完整设计流程(含CodeV转换技巧)

本文详细介绍了6mm定焦镜头从专利库检索到最终交付的全流程设计,重点解析了CodeV与Zemax工具链的无缝衔接技巧。通过实际案例展示规格定义、专利筛选、结构适配、非球面优化等关键步骤,帮助光学设计工程师提升设计效率和制造良率。特别包含CodeV转换Zemax的实用技巧,适用于机器视觉和安防镜头开发。

weixin_42561040的博客 161

jzoj5365-[GDOI2018模拟9.14]通信【线段树合并】

正题 题目大意 nnn个节点的一棵树,随机选择一个区间,求这个区间的点所构成的虚树的期望权值和。 解题思路 考虑每一条边的贡献,定义一边的点为黑点,一边的为白点,显然包含黑白的区间都会产生贡献。考虑减去没有贡献的,也就是对于连续的一段长度为lll的颜色相同的区间会产生贡献n(n+1)2\frac{n(n+1)}{2}2n(n+1)​ 用线段树维护然后合并即可。 时间复杂度O(nlog⁡n)O(n\log n)O(nlogn) codecodecode #include<cstdio> #i

QuantAsk 428

第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)

本文详细介绍了TMC2240电机驱动芯片的正反转实现方法,重点解决方向切换时的抖动和冲击问题。文章首先明确了硬件连接、基础配置和使能状态三个前提条件,然后阐述了DIR引脚电平控制方向的核心原理,提供了STM32的GPIO配置代码。针对方向切换时的电流冲击问题,作者提出了"停止-延迟-切换-启动"的平滑切换逻辑,并给出了包含方向枚举、转速控制和方向切换函数的完整代码实现方案。通过这种优化方法,可以有效避免电机在正反转切换时产生的抖动、冲击声和发热问题,实现稳定的双向控制。文章还提示了后续可

BackCatK Chen的博客 2074

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

2017,11,12月题目小结

最近没什么时间写博客,但还是要写点小结,加强印象。JZOJ4384 hashit后缀平衡树,注意重量平衡树的维护根,删除可以直接拉到叶子删掉。11.25清华集训这套比赛打的时候不严谨,要注意推式子时下标一定要检查好,不然很浪费时间。导致策略无法进行。jzoj5480.【清华冬令营2018模拟】第一题给一个一些位置不确定的数字n,求合法的数字,满足s_d(a)+s_d(b)=s_d(n) 发现a+b

ZLTJohn的博客 716

C#部署YOLO三种方案深度实测:OpenCV DNN vs ONNX Runtime vs TensorRT

在工业视觉项目落地阶段,C#生态下部署YOLO模型主要有三条技术路线。很多开发者仅凭经验选型,往往在部署后期踩中性能瓶颈、兼容故障、维护成本超标的坑。本文基于工控机常见硬件配置,针对YOLOv8系列模型做控制变量实测,从推理性能、部署难度、工业稳定性、综合成本等多个维度做横向对比,给出可直接落地的选型结论。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 464

NOIP2017 Day2_T3 列队

题目大意:众人皆知。题解:考场时打SBT打傻了,被卡爆了。这就是个傻逼线段树能过的东西,不要问我问为什么能跑这么快?每一行用线段树维护前m-1个。最后一列独立开来。查询用线段树二分。可以直接预开6e5。完。Code:#include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define fo(i, x,

Cold_Chair的博客 1425

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

小喵喵的新家

JZOJ3441 小喵喵的新家Description小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 。如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家。小喵喵天生多才多艺,对多种乐器颇有研究。对于生活中常见的图形,她对圆形很感兴趣,因此小聪聪决定为她建一个圆形的新家。我们设新家在一个平面直角坐标系上,其中新家的圆心为平面直角坐标系的原点。小聪聪有一把神奇的剪刀,他定义了一个值m,以等分

Cold_Chair的博客 1353

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

GDKOI 2016 魔卡少女

GDKOI2016 魔卡少女 Description 君君是中山大学的四年级学生。有一天在家不小心开启了放置在爸爸书房中的一本古书。于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地。这时一只看上去四不像的可爱生物“封印之兽”可鲁贝洛斯从书中钻了出来,它告诉君君书中的牌叫“库洛牌”,现在散落各地已实体化,要君君将它们全部再次封印起来,以免危害世界

Cold_Chair的博客 1207

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【NOI2014模拟】数列

Description:给定一个长度为n的正整数数列a[i]。定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|。你需要写一个程序支持2种操作(k都是正整数):Modify x k:将第x个数的值修改为k。Query x k:询问有几个i满足f(x,i)<=k。询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的

Cold_Chair的博客 1188

【NOI2018】你的名字

题目大意: 一开始给出字符串S。 Q次询问,每次给出l,r和字符串T。 问T有多少不同子串不是S[l…r]的子串。 ∑∣T∣&amp;lt;=1e6,∣S∣,∣T∣&amp;lt;=5e5\sum|T|&amp;lt;=1e6,|S|,|T|&amp;lt;=5e5∑∣T∣&lt;=1e6,∣S∣,∣T∣&lt;=5e5 题解: 不同子串一类问题优先考虑SAM。 感觉这题考的更多是对SAM的理解。...

Cold_Chair的博客 1083

线段树合并——hdu 5709 Claris Loves Painting

前言: 清冬上不会线段树合并又没想到启发式合并亏了50+…… 题目大意: 题目链接. 给出一个一棵以1为根的树。 每个点有一个颜色。 每次询问给出x,d,为以x为根的子树中,到x距离小于等于d的点有多少种不同的颜色。 题解: 感觉这题还是个线段树合并的裸题吧(也没有这么裸)。 先谈谈自己对线段树合并的感受。 线段树应该都得是动态开点的线段树,不然合并不就是O(n)的吗? 给出

Cold_Chair的博客 866

【NOIP2017提高A组模拟7.13】好数

题目大意:我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1.这个数是0或1 2.所有小于这个数且与它互质的正整数可以排成一个等差数列例如,8就是一个好数,因为1,3,5,7排成了等差数列。 给出N个非负整数,然后进行如下三个操作: 1.询问区间[L,R]有多少个好数 2.将区间[L,R]内所有数对S取余(S≤1000000) 3.将第C个数更改为X 题解:首先我们打个表

Cold_Chair的博客 862

JZOJ 100019【NOI2017模拟6.26】A

题目大意: 1<=n<=10^5题解:假设有两点u,v其中v = i *u(2<=i<=n/u) 如果有一路径a,b经过了它们两,那么a,b就是不合法的路径。我们可以尝试找出这样的路径。先求出树的dfs序,设为dfn[x] end[x]为x的子树中最大的dfn[x’]使dfn[u] < dfn[v]:1.u是v的祖先:设g为u到v的路径中距离u最近的那个点。 则跨过u,v的路径a,b(dfn

Cold_Chair的博客 809

【NOIP2013模拟联考7】最长上升子序列

Description:维护一个序列,使它可以进行下面两种操作: 1.在末尾添加一个数字x 2.将整个序列变成第x次操作后的样子 在每次操作后,输出当前序列的最长上升子序列的长度 序列初始时为空. n<=500000且所有输入的数字都是长整型范围内的非负整数题解:显然可以离散一下数字直接套用可持久化线段树,区间查询,单点修改。 也可以设fif_i表示长度为i的最小结尾,接着强行可持久化线

Cold_Chair的博客 743

【WinterCamp 2013】楼房重建 && 【NOIP2017提高A组模拟10.8】God Knows

感谢czy的题解。这两题是类似的。转换以后都是这样的: 有一个序列a[1..n],每次询问对a[i-j]之间的元素做一个(递增或递减)单调栈,求单调栈里有多少个元素,或者是还有b[1..n],求做了单调栈以后,单调栈里的元素对应的b的极值。 有修改,为单点修改。做法其实本质是利用线段树的分治思想。假设建的是递减的单调栈,求单调栈里元素的个数。设query(l,r,p)表示在a[l..r]所形成的

Cold_Chair的博客 736

JZOJ 100036 【NOIP2017提高A组模拟7.10】随机

题目大意: 1<=n<=10610^6题解:Ans=min(max(|ai−aj|,j−i+1))Ans = min(max(|a_i - a_j|, j - i + 1)) 假设我们现在的区间长度是m,最小值是min,将右端点右移,m++,min将可能会减小。 我们确定一个左端点l,假设右端点是r,那么一定当r位于m>=min的临界点上max(m, min)菜会最小。 证明:假设现在在临界

Cold_Chair的博客 733

【NOIP2017模拟A组模拟8.5】带权排序

Description: n<=105,0<=li<=ri<=109,0<=si<=109n<=10^5,0<=li<=ri<=10^9,0<=si<=10^9题解:E[f(i)] = ∑ri=lsi∗E[pi]\sum_{i = l}^r s_i * E[p_i] 正着考虑是不太容易的

Cold_Chair的博客 695

【GDOI2018模拟9.23】动态图

Description: 1<=n<=10^6,1<=q<=200000题解:暴力可以用按秩合并并查集,这个数据结构支持删除。对于正解,我们需要把l->r条边一次加进并查集,对于每一条边,它有贡献,就是加入它的时候,它会合并两个不同的集合。 反过来,它没有贡献,就是它所连着的两端本来就在一个集合里。假设我们按1->r的顺序加入每一条边,当加入一条边时,设它是x,y,设z为x到y的路径上编号最小的

Cold_Chair的博客 680
上一篇: 【NOIP2017提高A组模拟9.14】生命之树 (dsu on tree+trie)
下一篇: 51nod 1515 明辨是非 && 2017百度之星初赛第一场第二题(并查集+启发式合并)
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值