zoukankan      html  css  js  c++  java
  • test0418

    test 0418

    照样啥都不会

    T1 tree

    题意

    原题是给定一棵 (n) 个点的树((n le 50000)),求出树上距离前 (m) 大的路径长度((m le 300000))。

    开始想法

    写了个倍增lca的暴力,不过貌似有些地方炸掉了最后只有20分……

    正解

    考虑超级钢琴的做法,点分治时依次扫每棵子树,若将当前子树内的点作为路径的一个端点,另一个端点可以落在一个点分治序列的区间内(之前扫过的子树),这样得出一个长度为 nlogn 的点分治序列,加上每个点所对应的区间,然后就完全转为超级钢琴的问题了

    T2 mincost

    题意

    给定 n 个点(编号为 1-n),由 m 条无向边连接的图,每个点有两个权值 ax,bx,给定一个值 k,要求在图中选出大小为 k 的点集 S,使 S 中任意两点间存在仅经过在 S 中的点的路径。设 As 为点集 S 中 ax 的最大值,Bs 为 S 中 bx 的最大值,求一个合法的 S 使得 As+Bs 最小。

    开始想法

    题目都没怎么看懂……直接

    puts("no lolution");
    

    走人……

    正解

    特判 k=1 后,设每条边的权值为两个顶点权值的最大值,化点权为边权。

    考虑从小到大枚举 As,维护最小的 Bs 的值。

    注意到 Bs 单调递减,所以我们每次加入一条边时,看看 Bs 是否能减少,也就是问删掉当前权值最大的边后图的最大连通块是否大于等于 k。

    用 LCT 维护按权值 b 的最小生成树,每次加入的边没被删就维护最小生成树,删边的时候如果这条边还在生成树上就判断两个连通块的大小并决定是否删除,另外维护一个量记录当前大于 k 的连通块个数,注意 lct 要维护子树大小。

    T3 crisis

    题意

    图是一棵树,安全区只包括在标号 (l)(r) 的城市,小奇现在在城市 (x),它想知道最近的安全城市的距离。

    (n,q le 100000)

    其中有特殊点菊花图和链

    开始想法

    搏一搏,单车变摩托

    直接最段路(其实想错了只有一条路直接搜索即可,我这反而凭空多一个 (log) )来一波,没想到竟然搞过去了

    菊花图的数据搞错了……只有80

    正解

    每一个线段树结点维护一棵区间内的标号的点形成的虚树,对于每次询问,拆分成 (log(n))段区间,然后分别询问。

    将询问离线处理,不妨将询问点都插入区间虚树中,然后对每个线段树的结点一次树形dp 来计算答案。

    线段树结点中虚树总点数为((n+q)log n),加上构建虚树的复杂度,总复杂度((n+q)log^2n)

  • 相关阅读:
    花儿飘落何处
    别了,攀枝花
    致我心爱的梦中女孩
    解锁华为云AI如何助力无人车飞驰“新姿势”,大赛冠军有话说
    技术实操丨HBase 2.X版本的元数据修复及一种数据迁移方式
    技术实践丨手把手教你使用MQTT方式对接华为IoT平台 华为云开发者社区
    必须收藏:20个开发技巧教你开发高性能计算代码
    原来AI也可以如此简单!教你从0到1开发开源知识问答机器人
    诸多老牌数据仓库厂商当前,Snowflake如何创近12年最大IPO金额
    详解GaussDB(DWS) explain分布式执行计划
  • 原文地址:https://www.cnblogs.com/ztz-cpp/p/test0418.html
Copyright © 2011-2022 走看看