摘要:"原题链接" 和棋盘覆盖( "题解" )差不多.。 同样对格子染色,显然日字的对角格子是不同色,直接在对应节点连边,然后就是二分图最大独立集问题。 cpp include include using namespace std; const int N = 1e4 + 10; const int M
阅读全文
摘要:"原题链接" 因为每一块泥地要么被横着的木板盖住,要么被竖着的木板盖住,所以可以转换为二分图最小点覆盖问题。 我们可以先标记出所有连续的行泥地和连续的列泥地。 比如对于原题中的样例,标记后是这样的: 行连续泥地:$\begin{pmatrix}1 & 0 & 2 & 0 \\ 0 & 3 & 3 &
阅读全文
摘要:"原题链接" 对于每个任务,要么选$A$机器的模式,要么选$B$机器的模式,由此想到二分图最小点覆盖。 所以我们可以将任务作为边,将对应的$A$机器模式和$B$机器模式连起来,然后直接求最小覆盖即可。 注意,本题模式从$0$开始编号,而且机器初始是在$0$模式,所以在连边时要忽略含$0$模式的任务。
阅读全文
摘要:"原题链接" 要求所有线段不相交,实际上满足每条线段的长度和最小。 所以我们可以让蚁窝和苹果树连边,边权为两点的距离,然后就是求二分图带权最小匹配了,可以上$KM$算法或是费用流。 这里我使用的是费用流。
阅读全文
摘要:"原题链接" 首先可以二分答案,然后考虑检验答案。 我们可以对炮塔进行拆点,即能发射$x$颗导弹就拆成$n\times x$个点,作为一个集合,另一个集合则是$m$个侵入者,然后对于能在剩余时间攻击到侵入者的炮弹和该侵入者连边,然后跑匈牙利或网络流求二分图最大匹配即可(本质是多重匹配,使用拆点法)。
阅读全文
摘要:"原题链接" 和棋盘覆盖( "题解" )差不多。 将行和列看成$n+m$个节点,且分属两个集合,如果某个节点没有被禁止,则行坐标对应节点向列坐标对应节点连边,然后就是求二分图最大匹配了。 cpp include include using namespace std; const int N = 4
阅读全文
摘要:"原题链接" 对棋盘染色,坐标和为奇数的染黑,偶数为白。这时会发现对于相同颜色的格子,是无法放置骨牌的,这样我们就将所有格子分成两类,然后根据能否放置骨牌连边,最后就是求二分图最大匹配了。 这里我是用的匈牙利算法。 cpp include include using namespace std; c
阅读全文
摘要:"原题链接" $2 SAT$模板题。 对于有时间重叠的婚礼转换成$2 SAT$的命题形式连边,用$tarjan$找强连通分量并判断,确定方案即可。 然而一道模板题,我因为数组开小了调了一晚上。。。
阅读全文
摘要:"原题链接" $2 SAT$模板题。 将$AND,OR,XOR$转换成$2 SAT$的命题形式连边,用$tarjan$求强连通分量并检验即可。 cpp include using namespace std; const int N = 2010; const int M = 4e6 + 10; i
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 很明显的差分约束,但数据范围较大,朴素$SPFA$判正环求解会$T$(理论上如此,但我看到有挺多人用朴素的还跑得挺快。。),所以需要优化。 我们所建立的有向图中所有边的权值只有$0$或$1$,而且若图中有环,那么环上所有边的权值必须为$0$,否则无解。 所以我
阅读全文
摘要:"POJ原题链接" "洛谷2746原题链接" "洛谷2812(加强版)原题链接" 显然在强连通分量里的所有学校都能通过网络得到软件,所以我们可以用$tarjan$求出强连通分量并缩点,统计缩点后每个点的入度和出度。 对于第一问,因为所有零入度的点无法通过网络得到软件,所以答案就是零入度的点的数量。
阅读全文
摘要:"原题链接" 类欧拉回路,要求每条边被正反各经过一次,且从$1$出发并回到$1$。 只需每次搜索该点的边时,将该点的边对应的邻接表头及时修改为下一条即可,因为邻接表恰好储存了正反方向的边,所以及时更新表头就能保证每条边被正反各经过一次。 cpp include using namespace std
阅读全文
摘要:"原题链接" 建补图,这样题目要求的即是求有多少个点没有被任何奇环包含。 这里有两个结论: 1. 若两个骑士属于两个不同的$v DCC$,那么这两个骑士肯定不能一起出席会议。 2. 若在某个$v DCC$中,存在一个奇环,那么该点双连通分量中所有点都被至少一个奇环包含。 所以,我们只需要在用$tar
阅读全文
摘要:"原题链接" 先用$tarjan$找出所有$e DCC$,并进行缩点,这时桥的数量即是缩点后树的边数。 然后对于每一个添边$(x,y)$的操作,如果$x,y$属于同一个$e DCC$,那么桥的数量不变。 如果分别属于两个$e DCC$,那么从$x$所在的$e DCC$(设为$e[x]$)到$y$所在
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 若第$i$个点不是割点,那么只有这个点单独形成一个连通块,其它点依旧连通,则答案为$2\times (n 1)$。 若第$i$个点是割点,那么去掉这个点相关的边就会形成$3$种构成的连通块: 1. 由点$i$本身构成。 2. 由点$i$的子树(搜索树中)形成若
阅读全文
摘要:一道找割点模板 "原题链接" $tarjan$找割点模板,不解释。 cpp include using namespace std; const int N = 1e5 + 10; int fi[N], di[N '9'; c = getchar()) p |= c == ' '; for (; c
阅读全文
摘要:一道差分约束 "原题链接" 定义$f[x]$表示$0\sim x$间最少选择几个数,则$f[b_i] f[a_i 1]\geqslant c_i$。 显然的差分约束。 另有条件$f[x] f[x 1]\geqslant 0,f[x] f[x 1]\leqslant 1$。 按上述条件建图跑最长路即可
阅读全文
摘要:一道$0/1$分数规划+负环 "POJ原题链接" "洛谷原题链接" 显然是$0/1$分数规划问题。 二分答案,设二分值为$mid$。 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为$z=(x,y)$,$time$为原边权,$fun$为原点权,则将该边权换成$mid\times time[
阅读全文
摘要:一道负环模板 "原题链接" 负环模板,不解释。
阅读全文