首页 > 编程语言 >[杂项] [算法] [数据结构] 暑期专题狂补

[杂项] [算法] [数据结构] 暑期专题狂补

时间:2024-07-24 12:18:34浏览次数:10  
标签:狂补 专题 false 暑期 满足要求 引理 true 杂项 SAT

或曰,有学长两天授吾以十专题,吾顿感日月之紧迫,以专题竟不能以吾之所有,遂成此文,以记之

语文确实没学好

本文可能涵盖多个知识点,故每个的讲解比较简略,仅供参考

一. 2-SAT

$ 2-SAT $ 用于求解一个变量只有两种情况的适应性问题(就是有没有解以及输出一种方案);

其实可以类比二分图最大匹配(但其实两者的差别还是很大的);

算法流程

对于每一个变量,我们都有两种情况,$ true $ 和 $ false $;

而题目中给我们的,是形如 {$ A = true / false $ 或 $ B = true / false $} 的若干个二元组,问是否能够全部满足;

如题:Luogu P4782 【模板】2-SAT

考虑对于{$ A = p $ 或 $ B = q $}, 我们可以有如下的伪代码:

if (A == p) B 可以为 q 或 !q
if (A == !p) B 只能为 q
if (B == q) A 可以为 p 或 !p
if (B == !q) A 只能为 p

我们不难发现,对于第二种和第四种情况,我们是可以确定 $ A $ 和 $ B $ 的;

因此,我们可以依据这个性质,进行加边操作:

$ A_p \rightarrow B_q $ 这条边代表当 $ A $ 为 $ p $ 时,$ B $ 只能为 $ q $;

这样建好图后,我们要判断无解;

引理1: 若 $ A_p $ 与 $ A_{!p} $ 在同一强联通分量中,即无解;

显然;

求法:$ Tarjan $;
对于有解的情况,题目要求输出一种方案,有以下引理:

引理2: 对于$ A $ 的两种情况 $ A_p $ 与 $ A_{!p} $,若选择两者拓扑序较大的( $ Tarjan $ 遍历顺序较小的)作为答案,则满足要求;

这里的“满足要求”指的是满足要求的多种情况中的一种情况;

其实稍微思考一下,不难发现拓扑序较大的节点需要满足的条件较少,所以更容易满足要求;

至于证明,我来浅浅的证明一下:

证:

考虑采用反证法;

设 $ f( A_p ) $ 表示缩点后 $ A_p $ 所在强连通分量的拓扑序;

设有:

\[f(A_p) < f(A_{!p}) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ f(B_{!q}) < f(B_q) \]

且存在路径:

证毕;

标签:狂补,专题,false,暑期,满足要求,引理,true,杂项,SAT
From: https://www.cnblogs.com/PeppaEvenPig/p/18320582

相关文章

  • [2024JZYZ暑期集训]知识点总结
    前言第三次暑期集训了,与前两次不同,这次没有前两次的激动了,所以也能够更深入地学习算法。闲话宿舍挺好,有空床能住。捡了三块钱,史上最灵异事件。R班好热闹。认识了几个郑州那边的大佬知识点Day1讲了几个基础数据结构(树状数,线段树),作业里面的题目很多之前都做过,就当复习了。......
  • 题解|2024暑期牛客多校03
    【原文链接】比赛链接:2024牛客暑期多校训练营3A.BridgingtheGap2题目大意nnn个人过河,第i......
  • 2024牛客暑期多校训练营3
    Preface又被隔壁干烂了,这场最抽象的是三个人开局被A卡的死去活来,一直到中期的时候才以WA三发的代价过了这个题封榜后徐神狠狠发力连过两题,使得最后勉强只被打出\(n+1\)而不是\(n+2\),鉴定为我是纯纯的飞舞BridgingtheGap2首先不难发现过程一定是先进行\(T=\rceil\f......
  • 2024年暑期2024牛客暑期多校训练营1 C和H题解
    C题SumofSuffixSums题目大意:开始是给你一空数组,要经历q次操作,每次操作都会给出两个数字t和v,其中要从数组末尾去走元素t次,最后加上元素v。定义si=ai+ai+1+ai+2+ai+3+......+an,最后求s1+s2+s3+.......+sn的总和。最后答案注意取模。 题解:注意到sum的总和其实就......
  • 2024牛客暑期多校训练营2(部分题目题解)
    2024牛客暑期多校训练营2(部分题目题解)C.RedWalkingonGrid题意:给定只有红白的2*n个格子,只能走红色各自且只能上下左右走,问最多可以走多少红色格子。题解:左右走:dp[0][i]=dp[0][i-1]+1;上下走:intk1=dp[0][i];intk2=dp[1][i];dp[0][i]=max(dp[0][i],k2+......
  • 2024牛客暑期多校训练营2
    2024牛客暑期多校训练营2E-GCDVSXOR_2024牛客暑期多校训练营2(nowcoder.com)题意给定x,构造y<x使得gcd(x,y)=x⊕y思路取x−lowbit(x)即可,如果x是2的整数次幂则无解。代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;voi......
  • 2024信友队蓝润暑期集训提高1班②Day7
    知识总结Tarjan算法Tarjan算法是一种用于计算有向图中强连通分量的算法。Tarjan算法的基本思想是:首先,将图中每个节点标记为未访问。然后,从某个节点开始,对该节点进行DFS,并记录该节点的入度(即该节点的邻居个数)。对于每个节点,如果其入度为0,则说明它是一个根节点,将它标记......
  • SJTU 智能驾驶暑期营游记
    - 最初开始我其实是没有底的,完全不知道我们会做什么,需要做什么,要用到什么,不过既然这边说只需要一点 python 的基础,那么问题应该是不大的。- 前两天这两天可谓是轻轻松松,当时想要提前了解后面的内容,但是没给。所以处于自己去自由探索和摸索的过程。 过程很有趣,也很有意义。......
  • 暑期ACM-Week1(7.15-7.21)
    文章目录知识点基础程序设计技巧万能[头文件](#C++中的输入输出)while执行多次输入循环退出scanf,printf&cin,coutint初定义开数组一般大小:布尔型(bool)基本数据类型取值范围文件输入输出操作浮点数陷阱C++中的输入输出递归案例1:设计一个求阶乘的递归函数案例2:设计一个......
  • 「模拟赛」暑期集训CSP提高模拟3(7.20)
    仍在施工...$165pts,Rank18$B题挂了45分,不然可以AC两道题的,呜题目列表:A.abc猜想B.简单的排列最优化题C.简单的线性做法题D.简单的线段树题A.abc猜想题意:给定三个正整数\(a,b,c\),你需要求出\(a^b\)除以\(c\)并向下取整得到的值对\(c\)取模的结果......