金华3.17
金华3.17
ZROI1740 药香沁鼻
按照dfs序枚举点,每个点维护一个背包,对于点 \(x\) ,如果选这个点,就把它加到 \(dfn_x+1\) 的背包里,如果不选这个点,就把点 \(x\) 的背包与 \(end_x + 1\) (end是子树内最后一个点的dfn)的背包合并
ZROI1741 尺树寸泓
有个重要的性质是,平衡树无论怎么旋转,中序遍历是确定的。
然后每次旋转有两个点的子树区间会改变,随便维护下,最后直接单点修改区间求积就行了。
ZROI1742 凫趋雀跃
首先可以容斥走了几个限制的向量,转化成没有限制的就能分成两维分别求没有限制的方案数,这是个有限制的插板,再容斥下不满足限制的变量。
CF1500C Matrix Sorting
本质是按每列的数和输入顺序进行基数排序,n^3只需要每次找最后一个排序的列,可以bitset优化。
圆方树
广义圆方树上,圆点u的子节点(方点)v所代表的子图两两具有唯一公共点u
方点u的子节点(圆点)v所代表的子图 和 u代表的子图 具有唯一公共点v
板子:
void tarjan(int now,int pre){
dfn[now]=low[now]=++df;
stk[++top]=now;
for(int v:G[now]){
if(v==pre) continue;
if(!dfn[v]){
tarjan(v,now);
low[now]=min(low[now],low[v]);
if(low[v]>=dfn[now]){
sz++;
while(stk[top]!=v){
T[stk[top]].push_back(n+sz);
T[n+sz].push_back(stk[top--]);
}
T[stk[top]].push_back(n+sz);
T[n+sz].push_back(stk[top--]);
T[n+sz].push_back(now);
T[now].push_back(n+sz);
}
}else low[now]=min(low[now],dfn[v]);
}
}