• 1009-自闭++


    A

    假设我们以i为分界点,选取i以前的为J组,i以后的为S组(规定第i个被分到J组)
    J组还可以选([1,i-1])这个区间里的i−1个人,方案为 (2^{i-1})
    那么S组可以选((i,n])区间里的n−i个人,去掉一个都不选的不合法方案,其总方案数为 (2^{n-i}-1)

    i号点的贡献为:$2{i-1} imes(2{n-i}-1) ( i的取值范围是)[1,n]$(n号点可以取,因为(2^{n-1} imes(2^{n-n}-1)=0)
    那么答案就为$$sum_{i=1}{n} (2{n-i}-1) imes (2^{i-1})$$
    打开括号:$$sum_{i=1}{n} (2{n-1}-2{i-1})=sum_{i=1}{n} 2{n-1}-sum_{i=1}{n} 2^{i-1}$$
    整理得:$$Ans = (n-2) imes (2^{n-1})+1$$

    此题规模巨大,注意使用快速乘

    由于上次OB学长模拟题的影响,我想了半天的组合数,推来推去推了2h结果什么都没推出来,结果最后是这个,难受
    就算得到了第一个式子我也没有化简,难受(++)
    化简完了我也想不到要快速乘,难受(+=inf)

    B

    技巧:多起点最短路

    建一个虚拟的n+1号点,然后把这个点和每个起点(要塞点)连Len=0的边
    以n+1号点为起点跑Dijkstra,由于n+1号点和起点们的距离为0,这就相当于跑了一个多起点的最短路
    用P[i]记录第i号点的起点是哪一个要塞点,在更新dis[i]的时候更新P(需要特判从n+1号点更新的情况),对于要塞点,P[a[i]]=a[i]

    之后用一个结构体存下来再依次讨论每条边。
    设这条边的长度为z,两个端点分别为x,y
    如果 p[x]!=p[y] ,即存在一条p[x]→p[y]的长度为dis[x]+dis[y]+z的路径
    用ans[]存下来然后取个min

    由于我tcl,我又双叒叕把Dijksetra以另外一种诡异的方式写错了,导致至少30分没骗到

    C

    由题意可知,x到y的路径如果经过lca,边就会反向
    所以用带权并查集维护边与边的限定关系和边与边的反向关系,最后需要判一下无解情况(听说直接输出有30分QwQ)
    最后查询联通块(集合)个数x,答案为(2^x)(对于每一个联通块它有两种方向的选择)
    完全忘记了带权并查集是个什么东西Orz Orz Orz
    待会儿放上代码复习一波

  • 相关阅读:
    快速认识ELK中的L
    HBase启动和停止命令
    Kafka 快速起步(作者:杜亦舒)
    Kafka 消息存储及检索(作者:杜亦舒)
    HBase集群搭建
    Kafka消息保证不丢失和重复消费问题
    Kafka文件的存储机制
    Kafka的配置文件详细描述
    kafka常用操作命令
    BZOJ1769 : [Ceoi2009]tri
  • 原文地址:https://www.cnblogs.com/qwqq/p/11649949.html
Copyright © 2020-2023  润新知