zoukankan      html  css  js  c++  java
  • 【2018ICPC青岛】

    B

    题意:给n个问题,每个问题有一个固定的答案ai(<=10^5).现在有m个约束关系,每个约束关系是一个二元组(ui,vi),表示你回答ui、vi问题的答案必须一样。

    现在让你输出分别修复一个约束,然后回答每个问题,最多能答对多少道。

    分析:约束关系其实是弱联通关系,要求回答每个联通块是一样的。所以建一个图。

    然后考虑拆掉一个约束关系(一条边),可以发现如果处在一个强连通分量内,拆掉对答案没有影响。所以先tarjan缩编然后重建树。

    若是一条桥边,那么就是把树拆成多个部分,更新答案。

    具体我想可以通过dsu(长链剖分啊,重链剖分啊,把答案先存在重心上分治),或者通过树上的线段树合并(不知道内存会不会炸)。

    线段树合并的做法:对那个联通块的根rt,fa(vi)=ui,更新答案可以 = tree(rt)-tree(ui) 和tree(ui)-tree(vi)-val(ui) 和tree(vi) - val (ui) 。

    E

    题意:有n棵植物从1到n,初始能力值都为0,还有个成长值ai。有个机器人,初始在0,如果机器人走到i,那么i植物能力值加上ai,现在给出机器人的活动步数m(<=10^12),求使得所有植物能力值最小值最大的值。

    分析:二分答案,然后转化为每个植物至少要走ki次,判断是否能满足。据说从左到右贪心就可以了。

  • 相关阅读:
    获取系统版本
    一句代码删除所有子视图
    MAJOR-MINOR-MKDEV
    AF_UNIX和AF_INET域的socket在epoll中的差异
    python-print
    python-class(5)
    python-class(4)
    python-class(3)
    python-class(2)
    python-class(1)
  • 原文地址:https://www.cnblogs.com/Macaulish/p/9908699.html
Copyright © 2011-2022 走看看