模拟测试48

T1:

  题意:

    给定两个字符串,可以改变任意K个字符,求出最长的公共子串。

  题解:

    暴力枚举两个串的起始位置,暴力匹配,失配字符超过K个时跳出即可。

    时间复杂度$O(N^3)$

T2:

  题意:

    给一张无向图,求出不经过同一个点的长度为3的路径个数。

  题解:

    考虑容斥,先暴力DP所有方案,然后去除不合法方案。

    不合法方案有:两个点之间来回走,三个点之间来回走,三元环。

    两个点之间来回走方案数为:

      $sum_{i=1}^n du[i]$

    三个点之间来回走方案数为:
      $2*sum_{i=1}^n A_{du[i]}^2$

    三元环可以用bitset记录连边,然后暴力找。

    时间复杂度$O(frac{N^3}{32})$

T3:

  题意:
    给一张有向图,每个点有一个权值,每个点都能到达权值为它的权值的子集的点,求一号点到所有点的最短距离。

    优化建图,将每个点和它的权值连边,每个权值向它去掉一个1后的点连边。

    每个点进入权值的边权为0,出来的边权为1,不然会错。

    然后边权只有0或1,、双端队列BFS即可。

    时间复杂度$O(N+M+2^K)$

原文地址:https://www.cnblogs.com/hz-Rockstar/p/11561286.html