图论部分简单总结

总的感受:

这里大概囊括了一下图论的基础知识,图论是一个比较考验思维的部分。

尤其是后面有关二分图,网络流等的分支,对建模转化的要求还是很高的。

进入正题了:

一、最短路:

这一个部分不想多讲,虽然是很基础的一个部分,但是也很重要。

题目:

1、Telephone Lines。p.s:二分答案+最短路。

2、Roads and Planes。p.s:Topo序+dijkstra。

3、Cow Relays。p.s:Floyd+矩阵乘法。

三连击

二、最小生成树:

基础算法的话也不多讲了。主要是其实有些这种类型的题也很考验思维。。。

题目:

1、picnic planning。 p.s:最小生成树+枚举。

三、树的直径与LCA:

树的直径求法: ① 树形DP。 ②两遍BFS/DFS。

LCA的求法: ①树上倍增。 ②Tarjan+并查集(离线)。

这一类型的题目,一般需要能够发现隐藏在题目中的一些优秀的性质,然后和这些东西挂上联系,然后就很舒服了(有前提的略略略)。

题目:

1、APIO2010巡逻 p.s:分类讨论+树的直径。 题解传送门

2、NOIP2007树网的核 p.s:分析性质+树的直径。 题解传送门

3、POJ3417Network p.s:问题转化+树上差分。 题解传送门

4、SDOI2015寻宝游戏 p.s:dfs序+set(虚树??!!)题解传送门

5、严格次小生成树 p.s:最小生成树+树上倍增。题解传送门

6、NOIP2012疫情控制 p.s:二分答案+贪心+树上倍增。题解传送门

四、基环树

一般用来作为树问题的扩展。。解决基环树问题常用思路:一般先考虑树,然后挂上一条边后产生的影响(和没说一样)。。。

1、IOI2008Island p.s:基环树直径。题解传送门

五、负环与差分约束系统

负环的判定spfa不多聊。

讲下差分约束系统:

这是一种特殊的N元不等式组,它的N个变量a1...aN,满足一些形如下的约束:

    ai-aj<=bkai==ajai-aj>=bk...

然后需要解决的问题就是求一组解使得上述约束全部满足。

可以发现上述的式子和最短路需要满足的三角形不等式:dis[y]<=dis[x]+ver(x,y)十分相似。

那么我们可以考虑到把这些约束看作是两两变量之间的边,相对应的跑最短(长)路即可。

具体一点,

对于形如:ai-aj<=ck的式子,我们可以转换成ai<=aj+ck。

那么就相当于向j往i连了一条长为ck的边,那么对应的跑最短路即可。特殊的:如果存在负环无解

而对于形如:ai-aj>=ck的式子,就转换成ai>=aj+ck,可以发现只需将最短路改成最长路即可。

题目:

咕咕咕。。。

六、Tarjan与图的连通性

无向图桥(割边)判定:

low[y]>dfn[x];

无向图割点判定:

low[y]>=dfn[x];
//需要注意的是需要判断根节点的特殊情况...

无向图边双连通分量(e-DCC)求法:

把所有的桥去掉后得到的所有的连通块都是一个e-DCC。

无向图点双连通分量(v-DCC)求法:

把所有的割点去掉后得到的所有的连通块都是一个v-DCC???。

并不是。。。一定不能乱来啊233

事实上可以发现一个割点可能出现在多个v-DCC中。

这个时候就按照割点判断法则来,把用一个栈维护起来的点一个个弹出,他们组成一个v-DCC。同时,需要把割点的标记清空,因为后续它还有可能出现在别的v-DCC中。

e-DCC的缩点比较常规,需要注意的是v-DCC的缩点,新的图应该包括了每一个v-DCC和每一个割点。

有向图强连通分量(SCC)的求法:对于每一个点,若存在:

    low[x]==dfn[x];

那么把栈中维护的元素弹到x为止。

SCC的缩点也比较常规。

有向图的必经点和必经边。

注意:此处不考虑有环的情况。对于有环的情况请自行了解支配树。

既然没有环,可以直接正反两次进行Topo排序。

记录到x路径条数,不妨设从S到x路径条数为f[x],从x到T路径条数为t[x]。

① 如果对于一条有向边(x,y)。如果满足:

    f[x]*t[y]==f[T];

则此边为必经边。

② 如果对一个点x。如果满足:

    f[x]*t[x]==f[T];

则此点为必经点。

题目:

1、POI2008BLO p.s:割点。题解传送门

2、Knights of the Round Table p.s:点双连通分量+奇环。题解传送门

七、2-SAT问题

对于N个变量,每个变量只有两种取值。然后有M个条件,每个条件是关于两个变量取值的限制。

问能否找到一组合法的赋值方案使得M个条件都满足。

判定是否合法的方法:

首先,对这N个点建一张2N个点的图,i和i+N对应的点i的两个取值。

然后,根据每一个条件连有向边,(一般需要转一下思维)。

最后,tarjan缩强连通分量,如果任意一个SCC内存在i,i+N,那么就不合法。否则合法。

求一组合法赋值方案的方法:

这是个人理解:由于选择一个零出度点,不会对其他点造成影响。

所以:

1、我们可以建反图Topo序,相当于在原图自底向上进行Topo。

每遇到一个没有确定赋值的点,就给它和它对应的点赋值。

2、由于我们发现tarjan缩点得到的每一个SCC的顺序正好是自底向上的,所以我们可以直接赋值。

    val[i]=c[i]>c[opp[i]];//c是强连通分量编号...//i代表xi,0,opp[i]代表xi,1...

八、二分图和网络流

定义:一张没有奇环的无向图是二分图。

二分图判定方法:dfs染色。若存在相邻两个点,他们的颜色相同,那么就存在奇环。

最大匹配求法:① 匈牙利算法 ② 网络流。

完备匹配:一张图具有完备匹配,当且仅当两边的点都为N个,且最大匹配为N。

多重匹配:在最大匹配的基础上,点可以连不超过一特定限制数量的另一侧的点。

最大带权匹配:边有边权,在最大匹配的前提下,使权值和最大。

最大带权匹配求法:① KM算法 ② 费用流。

需要注意的是:KM算法仅仅适用于二分图具有完备匹配,所以一般都是费用流。

二分图最小点覆盖:等于最大匹配数。

简略证明一下:

首先,由于每条匹配边都肯定需要至少取一个端点,所以不可能小于最大匹配数。因此只需要给出一组构造,使得点数等于最大匹配数即可。构造如下:首先,先求出二分图最大匹配。然后,对于每一个左部非匹配点在进行一次寻找增广路的过程,(必然失败),同时进行访问标记。最后,选出左部未访问的节点和右部访问了的节点,这些点构成一组点数为最大匹配数的最小点覆盖。原因:左部的非匹配点显然都被标记了,右部的非匹配点肯定没被标记,一对匹配点要么同时被标记要么同时没被标记。那么:1、匹配边都被覆盖了,因为恰好每条匹配边只取了一个点。2、两个端点都是非匹配点的情况不存在,与最大匹配矛盾。3、左部是非匹配点,右侧是匹配点的非匹配边被覆盖了。4、右部是非匹配点,左侧是匹配点的非匹配边,左部点一定没被访问,所以也被覆盖了。

证毕。

二分图最大独立集:等于总点数-最小覆盖,即也等于总点数-最大匹配。

证略。

网络流初步:

最大流:EK算法,dinic算法(当前弧优化)。

最小割:最小割等于最大流。

费用流:spfa-EK费用流。

题目:

1、Ants p.s:二分图带权最小匹配。题解传送门

2、网络流24题 No p.s...题解传送门

最后的最后

蒟蒻的图论部分就到此结束了,有些地方讲的有点含糊不清,请多包容。

上述题解会很快跟上的。。。(希望别咕掉了@ο@

The Real End

转载于:https://www.cnblogs.com/Bhllx/p/10610275.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle学习笔记:数据字典

oracle数据字典 说起字典&#xff0c;下面让我来打个比方。我们读书写字&#xff0c;靠的是什么&#xff1f;你会说&#xff1a;字&#xff01;那我问你&#xff0c;你所用的字又是什么呢&#xff1f;&#xff01;这时&#xff0c;你只可能把字典&#xff08;新华字典、康熙字典…

linux分区转换gpt命令,Linux中磁盘如何转换GPT格式

Fdisk命令虽然很交互&#xff0c;操作也方便&#xff0c;但是对于大于2T的磁盘无法操作&#xff0c;假如我们想用大于2T的磁盘怎么办?可以把磁盘转化为GPT格式。GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的416个字节只留第一个16个字节&#xff0c;类似于扩…

JAVA格式化当前日期或者取年月日

Date d new Date(); System.out.println(d); SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateNowStr sdf.format(d); System.out.println("格式化后的日期&#xff1a;" dateNowStr); 转载于:https://www.cnblo…

DHL出台货运新方案

DHL出台货运新方案(来自&#xff1a;北京国际快递) 这是中国货运行业内首次由货运公司发起的关于货运安全方面的战略合作项目&#xff0c;货运公司与机场货运站、航空公司首次共同协作致力于货物的安全保障。 国际快递巨头DHL日前宣布&#xff0c;旗下的货运部门DHL全球货运物流…

linux 帐户安全管理员权限,Linux - 安全 - 账户管理

Linux 账户管理用户用户文件 /etc/passwd该文件所有用户可读&#xff0c;每一行代表一个用户&#xff0c;包含7个字段&#xff0c;分别用:隔开。# 查看文件内容cat /etc/passwd;内容&#xff1a;root:x:0:0:root:/root:/bin/bashwuhd:x:1002:1002::/home/wuhd:/bin/bash说明&am…

【转】sql表及字段命名规范

1.数据库表命名规范: (1)表名前应该加上前缀&#xff0c;表的前缀一个用系统或模块的英文名称缩写&#xff0c;前缀全部大写或首字母大写&#xff0c;表名中包含的单词首字母大写。 (2)数据库表名应该有意义&#xff0c;并且易于理解&#xff0c;最好使用可以表达功能的英文单词…

“卧槽”是怎么回事

“卧槽”是怎么回事2009-02-23 10版&#xff1a;新论 主持人&#xff1a;百科小子 提问者&#xff1a;丁莹&#xff08;上海南京西路&#xff09; 解答者&#xff1a;段凡&#xff08;华东理工大学社会与公共管理学院博士&#xff09; 问&#xff1a;日前有一项调查显示&am…

ubuntu查看硬件信息

ubuntu查看硬件信息 1,外部探针probe sudo apt-get install hwinfo 执行hwinfo获取系统信息 --short 2,系统命令dmidecode(硬件信息) or dmesg(主要是开机信息) 基于命令ubuntu 系统硬件信息查看 主板信息,序列号,产品名 dmesg | grep -i cpu dmidecode -t processor 硬盘(分区…

linux win10虚拟内存,高手解惑win10系统电脑虚拟内存不足的还原技巧

我们在使用电脑的时候&#xff0c;难免会遇到win10系统电脑虚拟内存不足的情况&#xff0c;根据小编的调查并不是所有的朋友都知道win10系统电脑虚拟内存不足的问题怎么解决&#xff0c;针对win10系统电脑虚拟内存不足的问题&#xff0c;我给大家整理总结了详细的解决步骤&…

第三章总结

第三章总结 栈与队列都是特殊的限制型的线性表&#xff0c;通常没有查询这个操作 栈的特点就是先进后出&#xff0c;只可以在栈顶进行插入删除&#xff0c;顺序栈定义指向栈顶与栈底的指针&#xff08;方便判断栈的情况&#xff09;也可以只定义一个栈顶指针top然后通过top-1来…

USB的八个问题和答案(转)

http://www.amobbs.com/thread-901041-1-1.html 问题一&#xff1a;USB的传输线结构是如何的呢&#xff1f; 答案一&#xff1a;一条USB的传输线分别由地线、电源线、D、D-四条线构成&#xff0c;D和D-是差分输入线&#xff0c;它使用的是3.3V的电压&#xff08;注意哦&#xf…

linux python3运行,将Python3安装到Linux上并运行

将Python3安装到Linux上并运行使用win10开发一个很好的python项目并把它部署到Linux中&#xff0c;有一个问题需要解决&#xff1a;如何在Linux中运行py文件&#xff1f;以LunixCentOS7.x平台为例&#xff0c;CentOS系统已经有了python2.x的自带版本&#xff0c;可以通过命令查…

初学者持续自我提升指南

这是一位长期关注自我提升方面的博主&#xff0c;在medium.com上发现的。 初学者持续自我提升指南 最佳自我改善文章 自我改善几乎总是从自我意识和改变习惯的能力开始。如果你认真改变自己的生活并改善自己&#xff0c;那么你应该从这两篇文章开始&#xff1a; 如何停止对自己…

ntp服务器池列表

ntp服务器池列表 CentOS&#xff1a; 0.centos.pool.ntp.org 1.centos.pool.ntp.org 2.centos.pool.ntp.org 国内可用的 ntp.fudan.edu.cn 复旦 210.72.145.44 国家守势中心服务器 亚洲地区的ntp服务器 Bangladesh — bd.pool.ntp.org (0) China — cn.pool.ntp.org (3) Hong K…

LINQ to SQL学习的几个问题

问题一&#xff1a; 什么情况下我们使用自动属性功能&#xff0c;生成自动属性时内部没有明确的私有变量那么我们如何访问这个私有变量呢&#xff1f; 如果不能那我们的封装还有什么存在的意义&#xff1f; Code1 /**//// <summary> 2 /// net 2.0中使用的方法来定义…

linux 运行pfx文件,Linux下pfx证书导出key和crt

Linux下.pfx证书导出.key和.crt1.确定openssl路径&#xff1a;openssl version -aOpenSSL 1.0.1e-fips 11 Feb 2013built on: Mon Jun 29 12:45:07 UTC 2015platform: linux-x86_64options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)comp…

C# foreach遇到async和await

一个简单的列子&#xff0c;需要把一个集合的数据添加到数据库中。 我先这样写了&#xff0c;然后报错了 public async Task<IHttpActionResult> Test([FromUri]string name ""){List<string> strList new List<string>() { "测试", &…

BZOJ2584 : [Wc2012]memory

xy方向分开考虑 用扫描线处理出拓扑序&#xff0c;第二问直接回答拓扑序&#xff0c; 第一问&#xff1a; 将操作倒过来&#xff0c;变成加入线段&#xff0c;用线段树维护区间拓扑序的最值 #include<cstdio> #include<algorithm> #include<set> #define N 1…

MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题

Asp.Net MVC RC2中Helper提供的DropDownList好象并不太好用&#xff0c;特别想给下拉框设置初始选中值的时候&#xff08;可能我还没找到正确的方法&#xff09; 小试了一下&#xff0c;有二个简单的解决办法:1.回到最原始的asp的办法&#xff0c;直接在view的循环中判断&#…

linux内存管理简介,Linux操作系统的内存管理特性简介 (3)

输出的第一行(Mem:)显示出物理内存的使用情况。总和(total)列中并没有显示出被内核使用的内存&#xff0c;它通常将近一兆字节。已用列(used column)显示出已用内存的总和(第二行没有把缓冲算进来)。空闲列(free column)显示了所有未被使用的空闲内存。共享列(shared column)显…