金华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]);
	}
}
posted @ 2021-03-17 20:23  lcyfrog  阅读(108)  评论(1编辑  收藏  举报