题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4883 题意:给出一个$N \times M$的棋盘,每个格子有权值.你需要每一行选中一个格子,每一列也选中一个格子(一个格子不能同时被行选中和被列选中),求这些格子权值和的最小值,$2 \leq N,M \leq 10^5 , N \times M \leq 10^5$ 考虑将行与列拆成点,格子的权值变为连接其对应行与列对应节点的边,我们的问题也就是需要找到一个边集,使得每一条边都在…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4883 首先,注意到每个点可横可竖,但花费一样: 所以考虑行列的交集,那么这个条件可以转化为行点和列点之间的边,边权就是花费: 如果行和列都按原图交点连了边,那么问题就转化成在有向图中,每个点(原图的行/列)都有且仅有1入度: 这个性质让我们联想到基环树,所以只需要构造一个基环树森林即可: 又要边权和最小,仿照 Kruskal,从小到大加边,对于连通块,看看是否已经有环即可. 代码如下: #…
容易想到网络流之类的东西,虽然范围看起来不太可做,不过这提供了一种想法,即将行列分别看做点.那么我们需要找一种连n+m条边的方案,使得可以从每条边中选一个点以覆盖所有点.显然每个点至少要连一条边.于是这个东西就必须是环套树森林了,并且显然其可以满足条件.现在要求的就是最小环套树森林. 求法类似kruskal,只要连了这条边之后该连通块的边数<=点数就给他连上.显然这样得到的是环套树森林,至于为什么最小,证明方法也与kruskal类似,即如果当前边不冗余却不加,则需要另一条边来做等效(这里等效比较…
BZOJ4883 棋盘上的守卫 考虑费用流,但是数据范围太大 考虑 \(i\) 行 \(j\) 列如果被选择,那么要么给 \(i\) 行,要么给 \(j\) 列 把选择 \(i\) 行 \(j\) 列当做一条边,每一行每一列建成一个点,于是我们可以用边的方向来代表我们给的究竟是第 \(i\) 行还是第 \(j\) 列 这样,当全部覆盖以后,我们发现图的每个点入度为 \(1\) ,本质上是一个基环森林,于是我们不需要考虑边的方向,只需要求出基环森林即可. 可以魔改 kruskal ,判断当前联通块…
题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ4883]棋盘上的守卫 一题. 将每门课程对应的两天连边,如果课程 \(i\) 要在第 \(x\) 天考,则对应边指向 \(x\) . 最后有 \(n\) 天,\(n\) 条有向边,每条边的入度为1,构成了基环树森林. 总时间复杂度为 \(O(nlogn)\) (离散化). 总结:这种 \(A\)…
题意 有一大小为 \(n*m\) 的棋盘,要在一些位置放置一些守卫,每个守卫只能保护当前行列之一,同时在每个格子放置守卫有一个代价 \(w\) ,问要使得所有格子都能够被保护,需要最少多少的代价. \(2\leq n,m\leq 10^5\ ,n*m\leq 10^5\) 分析 将行列看成 \(n+m\) 个点.将每个格点放置守卫看成所在行列连了一条边,然后把每条边定向,如果被指向表示当前格点对当前 行/列 进行了保护. 这样就会有 \(n+m\) 个点,\(n+m\) 条有向边,同时每条边最多…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4883 题解 每一行和每一列都必须要被覆盖. 考虑对于每一行和每一列都建立一个点,一行和一列之间的连边就是对应坐标的点权. 这样,每一个点都必须要有一个出边以表示这一行/列选择了这个边. 每个点都必须要有一个出边就是基环树森林了. 所以直接用 kruskal 维护最小基环树森林. 维护方法大概就是并查集的时候再维护一个信息表示这个连通块存不存在环.一条边可以贡献,第一个时候是在两个连通块不连通…
传送门 BZOJ Solution 考虑一下如果把行,列当成点,那么显然这个东西就是一个基环树对吧. 直接按照\(Kruscal\)那样子搞就好了. 代码实现 代码戳这里…
[题解]BZOJ4883: [Lydsy1705月赛]棋盘上的守卫(最小生成基环森林) 神题 我的想法是,每行每列都要有匹配且一个点只能匹配一个,于是就把格点和每行每列建点出来做一个最小生成树,但是不幸的是,这样子无法控制一个点是否选择多次,并且无法控制那些不需要变成守卫的点的情况 然后我看了题解.. 一个元素的两种状态可以对应上一条边的方向,现在问题就变成了要选出一些边使得所有点的入度为1.也就是一个外向基环森林,直接类似克鲁斯卡尔做就行了. 这貌似可以抽象成一种模型,也就是有待选点,匹配点,…
4883: [Lydsy1705月赛]棋盘上的守卫 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 475  Solved: 259[Submit][Status][Discuss] Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个守卫,一个守卫 不能同时兼顾行列的防御.请计算控制整个…