zoukankan      html  css  js  c++  java
  • Codeforces Round #377(div 2)

    A、B、C:=,=

    D:题意:有n(n<=1e5)天,每天可以选择考某一门科目或者在家复习,一共m(m<=1e5)门科目,每个科目都有特定的需要复习时间,只有复习了足够的天数才可以考并且考过。给出每天的信息,0代表无考试科目,其他代表那天考那一门(当然你可以选择不考,这天复习),问要考过所有科目至少需要多少天,无法考完输出-1

      分析:这题是最优化问题,直接考虑不好考虑。

         可以转化成二分判定问题,二分天数mid,接下来问题就变成了如何判定mid天内是否可以考完

         贪心的思想,从后往前,将最靠后的不同科目标记在时间轴上,从1~mid天贪心,先复习时间轴靠前的。

         注意写check函数的时候要考虑到是否所有科目都包含了进去

    E:题意:有n个电脑和m个适配器(n,m<=2e5) 他们各自都有自己的电压,要求电脑和适配器电压相同才匹配。对适配器的一次操作可以将其电压除以2向上取整。求最多有多少个电脑可以匹配到适配器,在这个基础上,再求最少操作总次数,并输出方案。

       分析:第一眼是二分图匹配,然而范围太大,不可行。

          刚开始,如果有电脑和适配器电压相等,那么显然他们直接匹配,不会让结果变差。

          剩下的就肯定无法匹配了,所以这些适配器需要操作

          可以将这些适配器都操作一次,再和剩余电脑匹配,再反复操作,直到所有适配器电压都是1

          这样的操作让适配器都尽可能和电脑匹配,满足让电脑匹配数最大,同时类似BFS的所有适配器同时遍历保证了总的操作数最少。

          具体操作上可以用multiset来存电脑的信息,一个数组存适配器信息,模拟一过程就行了。

          注意multiset.erase(value)会将所有权值为value的点都删掉,所以删除的时候要删除find()的地址,而不是find()的权值

    F:题意:n点m边无向图(n,m<=4e5),没有重边和自环。让你给每条边定向,让点能到达其他点的最小数目最大。

       分析:类似有向图求强连通,先用Tarjan求出边双联通分量,缩点成一个树,相当于要给树的边定向,然而必然会有一个分量A连向另一个分量B,题目要让最小到达点数最大,最小到达点数其实就是叶子节点的所含点数,所以ans=最大的双联通分量的size,具体方案可以选择size最大的分量中任意一点dfs遍历所有边,倒过来就是遍历方向。

  • 相关阅读:
    误操作 rpm -e --nodeps zlib
    Raid阵列之简单介绍
    GpG使用指南
    hadoop系统的端口
    网站日志流量复杂分析
    Flume在企业大数据仓库架构中位置及功能
    Hue的安装与部署
    Hive中的数据倾斜
    Hive的三种Join方式
    如何每日增量加载数据到Hive分区表
  • 原文地址:https://www.cnblogs.com/wmrv587/p/5988316.html
Copyright © 2011-2022 走看看