图论建模

生成树相关

引入

给你 \(n\) 个数,每次选出两个数 \(x, y\),获得 \(x \oplus y\) 的贡献,删除 \(x, y\) 中的一个。重复以上操作直到只剩一个数,求获得的最大贡献值。

发现形如选出两个数,加上 \(f(x, y)\) 的贡献,再删除其中一个的一个操作集合和边权为 \(f(x, y)\) 点为 \(x, y\) 的一颗生成树一一对应,直接跑最大生成树即可。

AT_jsc2019_qual_e Card Collector

先给出解法:

考虑对于所有卡片 \((R_i, C_i)\),在 \(R_i\)\(C_i + H\) 之间连一条边权为 \(A_i\) 的边,然后跑出最大生成基环树森林。

考虑其实际意义:在两点之间连边表示这个卡片只能从某行或某列被选走,而一颗基环树的所有边能被定向使得每个点的出度都为 \(1\),即其中的所有卡片都能被选中一次且不会漏选;树与之类似,不过有某行或某列没有匹配到卡片。

最大生成基环树森林可以使用带标记的并查集实现。

体会一下可以感受到与引入结论之间的关联。

二分图相关

AT_codefestival_2016_qualA_d マス目と整数

大典题算是。

尝试构造 \(a_{i, j} = x_i + y_j\),发现构造此形式的 \(a\) 必然满足限制条件。于是我们得到若干等式:

\(x_i + y_j = v_k\),可以在 \(i\)\(R + j\) 之间连边,此时一定是二分图。

先不考虑非负的限制,可以容易得到一组特解或判断无解(做法和二分图染色差不多)。考虑通解形式,将二分图上的白点权值 \(+C\) 则所有黑点权值需要 \(-C\),又因为所有行只和列连边,所有列只和行连边,得出总和不变

我们选出最小的 \(x, y\),相加非负即有解,否则无解。

结合上题有如下观察:在行列乘积很大,中间点的个数级别远低于行列乘积时,可以考虑将行列拆开考虑。

posted @ 2025-12-04 22:06  zjh114514  阅读(0)  评论(0)    收藏  举报