首页 > 其他分享 >图论乱讲

图论乱讲

时间:2024-12-26 21:54:14浏览次数:2  
标签:图论 乱讲 gcd 连通 偶环 那么 奇环 分量

因为有个人说我选的题目太难了,所以我决定把难度控制在黑题以下,于是全部选择了一些紫题。

下面可能会用到一些知识,别担心都是学过的和一些概念,如果不会那么事后可以去看看:

CF1680F

如果原图是二分图,那么直接进行染色即可,下面考虑不是二分图的情况。

因为一个图是二分图的充要条件不存在奇环,所以为了将一个不是二分图的东西进行染色,需要找到一条边满足所有的奇环都经过这条边而且没有偶环经过。

之所以需要没有偶环,是因为选择的这条边两侧的颜色是一样会的。

这样就相当于经过这条边不改变颜色,所以原本的偶环就只会经过奇数条改变颜色的边,也就相当于是奇环了。

现在需要找到一条被所有的奇环经过且没有被偶环经过的边,或者报告无解。

容易想到给所有的奇环和偶环分别染色,最后遍历每一条边,如果满足条件那么就有解。

考虑对图进行一个类似于 Tarjan 的操作,跑出一个 dfs 树。

因为所有的环肯定是经过了若干条树边和一条非树边,所以就可以在遍历树的同时处理非树边即可。

具体的,可以通过树链剖分的方式处理树边,对于非树边直接暴力修改即可。

对于只有一个奇环的情况并不需要特判,因为这个情况非树边必然满足被所有的奇环经过而且没有偶环经过。

时间复杂度为 \(O(m+n\log n)\)。

CF1515G

在一个有向图中,因为要从 \(p\) 出发然后再回到 \(p\),所以路程只能在包含 \(p\) 的强连通分量里面。

那么容易想到先用 tarjan 跑出强连通分量,然后对于每一个强连通分量分开求解,下面的所有讨论都在一个强两连通分量之内。

另外因为这个题目要求对 \(t\) 取模,所以一下所有的操作都是在模意义之下的。

首先有两个个性质:

如果存在一条路径 \(a\to b\),而且边权为 \(w\),那么就可以构造出 \(b\to a\) 而且边权为 \(-w\) 的路径。

证明:

因为 \(a,b\) 在同一个强连通分量内,所以它们必然在一个环中,假设这个环的边权和为 \(s\)。那么从 \(b\) 出发绕着环走 \(t\) 圈,这样的贡献就是 \(s\times t\) 也就是 \(0\)。

所以只要在最后一圈的时候直接停在 \(a\) 那么就相当于构造出了一条 \(b\to a\) 的边权为 \(-w\) 的路径。

另外有一个性质,如果强连通分量上有一个环,那么所有的点都可以看作在这个环上。

证明:

假设 \(a\) 在长度为 \(x\) 的环上,而 \(b\) 不在。

假设 \(a\to b\) 的路径长度为 \(w\),那么根据上面的性质,显然 \(b\to a\) 的长度就是 \(w\)。

那么就可以构造 \(b\to a\to b\) 的路径,在到达 \(a\) 之后可以随意的在环上行走,而结束后又可以原路返回。容易理解,这样路径的长度为 \(w+x+(-w)=x\)。

那么我们假设这个强连通分量中,所有的环的大小为 \(x_1,x_2,\cdots,x_{ct}\),那么如果需要有解显然需要满足:

\[{\sum\limits_{i=1}^{ct} k_i\times x_i}\equiv s\pmod{t} \]

其中 \(k\) 满足:

\[\forall i\in[1,ct]\cap \mathbb{Z}\mid k_i\in\mathbb{Z} \]

那么根据裴蜀定理,有:

\[\gcd\limits_{i=1}^{ct} x_i\mid s \]

所以现在的问题就转化成为了统计一个强连通分量内所有的环的长度的 \(\gcd\)。

显然,直接求出所有的环显得并不现实,因为原本环的个数时无限的,所以考虑只求解出一些环但是其 \(\gcd\) 却与原本一样。

容易发现只有简单环对答案有贡献,因为不是简单环的一定都是几个简单环的和,而 \(\gcd\) 有性质 \(\gcd(a,b)=\gcd(a,b,a+b)\),所以注定时不影响答案的。

为了以防有人不会证,这里说一下:

设 \(\gcd(a,b)=g\),那么 \(a=\dfrac{a}{g}\times g\),\(b=\dfrac{b}{g}\times g\),所以就有 \(a+b=g\times ({\dfrac{a}{g}+\dfrac{b}{g}})\)。

对于统计环的情况,在这个强连通块中构建出一个 dfs 树,显然环有两种情况:一条非树边和一些树边组成,多条树边和一些树边组成。

显然对第二种情况,这些环的长度都可以通过第一种环通过加减得到,所以显然不会对 \(\gcd\) 产生影响。

于是就遍历这个 dfs 树,如果遇到了返祖边那么就更新 \(\gcd\) 于是就做完了,时间复杂度为 \(O(n\log V)\)。

标签:图论,乱讲,gcd,连通,偶环,那么,奇环,分量
From: https://www.cnblogs.com/liudagou/p/18634256

相关文章

  • 水题乱讲
    一大堆错,别喷了。前言下图取自某人的PPT,有删改。题面APIO2014序列分割题目大意你正在玩一个关于长度为\(n\)的非负整数序列的游戏,第\(i\)个位置的值为\(a_i\)。这个游戏中你需要把序列分成\(k+1\)个非空的块,为了得到\(k+1\)块,你需要重复下面的操作\(k\)......
  • 每天学习编程两小时(第1天)-图论算法
    学习目标:掌握图论的基本算法(求解每个节点的单源/多源最短路径,求解最小生成树)学习内容:例如:prim算法求解最小生成树Dijkstra算法求解单源最短路径学习时间:2024年12月23日下午学习产出:掌握最小生成树和最短路径的定义和区别掌握prim算法和Dijkstra算法的思想实现......
  • 省选图论专题
    还没打完数学专题呢就来打这个了。(其实是不会多项式)难度大概升序。GivingAwards注意到一个关键信息:每对人只会被提到一次。所以一定有解。考虑卡bug,假如\(a\)欠\(b\)钱,那么就先让\(b\)取钱再让\(a\)取钱,建边dfs即可,注意图不连通。点此查看代码#include<bits/stdc++.h>usi......
  • 图论 网络流总结
    图论|网络流总结NOI2018归程题目描述本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定。魔力之都可以抽象成一个\(n\)个节点、\(m\)条边的无向连通图(节点的编号从\(1\)至\(n\))。我们依次用\(l,a\)描述一条边的长度、海拔。作为季风气候的代表城市,魔力......
  • 2.图论
    省选图论专题开题顺序:\(GAJDCFO\)\(A\)luoguP4151[WC2011]最大XOR和路径题解\(B\)CF19EFairy\(C\)CF412DGivingAwards建出反图后拓扑排序无法处理欠钱关系中存在环的情况,但可以借鉴其思路。仍考虑自下而上叫人,在叫完所有子节点后再加入答案即可。点击查......
  • hot100-一刷-09图论(共4道题)
    题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:......
  • 数据结构——图论基础
    文章目录1.图的基本概念1.1图的定义1.2图的基本术语2.图的存储结构与基本运算算法2.1邻接矩阵2.2邻接表2.3十字链表3.图的遍历3.1深度优先遍历(DFS)3.2广度优先遍历(DFS)4.生成树与最小生成树4.1生成树的概念4.2非连通图与生成树5.最短路径5.1Dijkstra算法5.2Floyd-......
  • 图论--强连通分量(tarjan)
    一.DFS森林和强连通分量(SCC)强连通:u->v,v->u,那么u和v就是强连通的,即u和v互相可达强连通分量:一个集合内的所有点都互相可达二.tarjan算法#include<bits/stdc++.h>#definexfirst#defineysecond#defineendl'\n'#defineintlonglongusingnamespacestd;......
  • 力扣-图论-8【算法学习day.58】
    前言###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.引爆最多的炸弹题目链接:2101.引爆最多的炸弹-力扣(Le......
  • 【唐叔学算法】第八天:并查集-图论连通性的大杀器
    你是否曾为如何高效地解决图论中的连通性问题而烦恼?并查集算法,就像一张无形的网,能帮你轻松连接所有节点。今天,就让我们一起揭开并查集算法的神秘面纱,探索它在Java编程中的应用。并查集是什么?并查集(Union-Find)是一种数据结构,用于处理一些不交集的合并及查询问题。它支持两......