WC 2021 简要题解

「WC2021」括号路径

  • 题意:给 n 个点 m 条边的图,从 \(u\)\(v\) 有个颜色为 \(c_e\) 的右括号,从 \(v\)\(u\) 有个为 \(c_e\) 的左括号
    \((s,t)\) 的对数,使得从 \(s\) 可以走一条合法的括号序列到 \(t\)

  • sol:首先注意到若 \((s,t)\) 合法则 \((t,s)\) 合法
    我们考虑将可以互相到达的点缩到一个连通块中,那么答案即为 \(\sum \binom{cnt_i}{2}\)
    发现合并联通块的过程大致如下:选择一个点 \(v\) 和其颜色相同的边 \((u_1,v),(u_2,v)\dots\)
    \(u_1,u_2,\dots\) 合并为一个集合
    考虑每次将 \((a,b)\) 合并,即将其出边合并,每次合并最多会新增 \(\min(|e_a|,|e_b|)\) 个合并事件
    将这些事件扔进队列后继续合并就可以了
    事件数是 \(m\log m\) 级别的,用 \(map\) 存边(注意到只需要存每种颜色的最后一条边和后面的合并)
    复杂度为 \(O(m\log^2m)\)

「WC2021」表达式求值

  • sol:注意到可以求出 \(\ge x\) 的方案数,那么本质不同的大小关系只有 \(2^m\)
    对每种关系求一遍,复杂度 \(O(2^m(n+|S|))\)

「WC2021」斐波那契

  • 给出 \(mod\le 1e5\)\(n\) 次询问,每次给出 \(fib_0=a,fib_1=b\),求最小的 \(p\) 使得 \(fib_p=0\)

  • sol:打表得知周期最大为 \(3.75\times 10^5\),考虑 \(mod\) 为质数的情况,即求 \(bfib_{p-1}+afib_{p-2}=0\mod mod\)
    注意到 \(a,b\) 非 0,且 \(fib_{p-1},fib_{p-2}\) 不同时为 0,故我们预处理非 0 的 \(\frac{fib_{p-1}}{fib_{p-2}}\) 即可
    考虑 \(mod=p_1p_2p_3\dots p_k\),我们对每个 \(p_i\) 处理出 \(\frac{fib_{p-1}}{fib_{p-2}}\) 的周期 \(T_i\),那么最后 \(excrt\) 合并即可
    考虑 \(mod\) 一般的情况,对于 \(p_i^{c_i}\) 求出其周期 \(T_i\),主要问题是 \(fib_{p-2}\) 不存在逆元
    注意到此时 \(fib_{p-1}\) 存在逆元(因为相邻两项不同时整除 \(p_i\)),此时我们预处理出 \(\frac{fib_{p-2}}{fib_{p-1}}\)
    同时需要注意询问 \((a,b)\) 时,求出 \(d=gcd(a,b,mod)\),然后 \(a:=a/d,b:=b/d,mod:=mod/d\)
    此时 \(a,b\) 存在逆元,容易发现这样需要预处理 \(p_i^{1\dots c_i}\) 的每种情况,复杂度 \(O(mod\log mod+n\log mod\log\log mod)\)

posted @ 2021-04-22 20:33  FSYo  阅读(260)  评论(0)    收藏  举报