DP&グラフ理論DAY午後5時
ツリーチェーン分割
重鎖または軽に属する各エッジまたはエッジ
証明: https://www.cnblogs.com/sagitta/p/5660749.html
光側が交互に重鎖を取っている(ここで、重鎖は、エッジの数を取ることができます)
1.dfs1統計サブツリーのサイズは、息子の重量を決定します
重鎖、重鎖、サブツリー、それぞれ、連続したストレッチを見つける2.dfs2
重鎖に属する各ノード
<TBへ
親ノードTAへジャンプ
LOGNレベル
ツリーのシリアライズ
木の上SPOJ Qtreeのクエリ
溶液
チェーン分割ツリー+ セグメントツリーメンテナンス間隔最大値
チェーンスプリットポイントTandaoの右側にあるBFS木
BZOJ 1036 ツリーの統計
溶液
BZOJ 4034
点数があるN個のツリーは、ポイント1がルート、およびツリーを指すように右です。そこであるMの
三種類に分け操作は、:
1 ノードにX 点権が増加しました。2. ノード置くXが増加しているすべての点で右点をルートとするサブツリーを。3. ノード求めXの正しい道のルートへと全ての点でポイントを。
溶液
プラスシングルポイント
間隔の変更
インターバル・お問い合わせ
BZOJ 2243 染色
溶液
同时维护区间左右端点颜色
若相同,左右颜色段数相加-1
不相同,直接加起来
BZOJ 2238 MST
Solution
1.对于m-n+1条非最小生成树上的边,不会对原来的最小生成树产生影响,直接出结果
2.对于最小生成树上的边,用别的来替代
强连通分量
缩点
Tarjan 算法
// Tarjan void tarjan(int u) { dfn[u] = low[u] = ++tim; stk[++top] = u; for (int i = hd[u], v; i; i = nt[i]) if (v = to[i], !scc[v]) { if (!dfn[v])tarjan(v), low[u] = min(low[u], low[v]); else low[u] = min(low[u], dfn[v]); } if (dfn[u] == low[u]) { ++cnt; do { scc[stk[top]] = cnt; } while (stk[top--] != u); } }
BZOJ 2208 连通数
14: 1-2 , 1-3 , 1-4 , 1-5 , 2-3 , 2-5 , 2-4 , 3-5 , 3-4
Solution
bitset
bitset<100000>a;长度为1e5的二进制数
可以数组O(1)查询,赋值
支持位运算
a.count( ) 统计 a 里面有多少位为 1
POJ 2186 Popular Cows
POJ 1236 Network of Schools
Solution