• ARC194D Reverse Brackets

    一次选中的区间一定是合法括号串,合法括号串翻转后仍然是一个合法括号串。
    如果我们把整个序列拆成一个极长合法括号串序列,翻转就相当于序列的一个子串的 reverse。
    每次选一个子串的 reverse 其实相当于可以任意排列,因为可以每次选取子串长度为 $2$,那么就类似于冒泡排序,可以任意换位。
    那么对答案的贡献就是多重集的排列,即序列长度阶乘除以每个的出现次数的阶乘,然后对拆成后的合法括号串递归下去即可。


  • CF621641A Majsoul

    https://codeforces.com/group/MIyYz3rj9b/contest/621641/problem/A


  • ARC201E Total Area of Bounding Boxes

    相当于有 $n$ 个点 $(x_i,y_i)$,求


  • ARC199A Flip Row or Col 2

    先操作若干列使得第一行全部变成 $0$。


  • P12621 [NAC 2025] Circle of Leaf 题解

    记 $f_{i,j}$ 表示确定完 $i$ 子树内每条边的选取情况(包括叶子到根的边)后,有 $j$ 条路径能从 $i$ 走到叶子再走到根的方案数。


  • ARC201C Prefix Covering 题解

    如果把选择的字符串放到 trie 上,那么当且仅当选择的点能往上覆盖到根才能拼出所有字符串。
    换句话说,记 $f_u$ 表示以 $u$ 为前缀的任意字符串能否被拼出,那么


  • ARC197D 祖孙关系题解

    如果 $a_{x,y}=1$,那么 $x,y$ 具有祖先关系,我们发现儿子的所有祖先关系都被他祖先包括了,因此 $a_x a_y=a_x$ 或 $a_x a_y=a_y$。

  • 莫比乌斯函数重置版

    \[\mu(n)=\left\{ \begin{matrix} 1&n=1\\ 0&n 含有非平凡平方因子\\ (-1)^k&其中 k 为 n 本质不同的质因子个数 \end{matrix} \right.\]
  • 行列式——矩阵树与 LGV

    行列式


  • 虚树速通

    如果每次询问是输入树上一个点集,那么做法往往是虚树。
    虚树就是把原图中所有有用的点抠出来,然后把抠出来的点建颗树,叫虚树。
    那哪些点有用?b 中的点是输入的点(关键点),c 中的点是有用的点(为了可以树形 dp 不得不加入的点)。
    其实虚树就相当于把一棵树中两个关键点路径间的点压缩成了很少的几个点,把不在关键点路径上的都忽略掉了。

    int m;cin>>m;
    b.resize(m);
    for(int i=0;i<m;i++)cin>>b[i];
    std::sort(all(b),[](int x,int y){
    	return dfn[x]<dfn[y];
    });
    c=b;
    for(int i=1;i<m;i++)
    	c.push_back(LCA(b[i-1],b[i]));
    sort(all(c),[](int x,int y){
    	return dfn[x]<dfn[y];
    });
    c.erase(unique(all(c)),c.end());
    for(int i=1;i<siz(c);i++){
    	int j=LCA(c[i-1],c[i]),d=DIS(j,c[i]);
    	g2[j].emplace_back(c[i],d);
    	g2[c[i]].emplace_back(j,d);
    }