
图论
minato_yukina
主播不是退役了,主播只是没有名额
展开
-
树的直径个人学习笔记(含例题)
1.树的直径 树的直径定义为一颗树的最远的两个点对d(i,j)对应链的长度. 如何求树的直径? 采用两次dfs的方法。第一次dfs先求出对于1号点来说最远的点u.那么u一定是该直径上的一端. 然后我们进行第二次dfs.以u节点为根,找到最深的子节点v.那么路径(u->v)就是这个树的直径. 代码: 注意注意注意di是全局变量,不能传参,否则会错,要传参的话得是引用类型,每次使用前需要清空. 在第三个函数中(U,V)是引用类型,就是代表找到的两个最远的点啦. 并且得到一个最终的fa[u]fa[u]fa[原创 2022-04-06 19:49:28 · 390 阅读 · 0 评论 -
The Largest Clique UVA 11324 (缩点后求DAG上最长路)
题意:给一个有向图G,求一个结点数最大的结点集。其中,要求里面任意的两点u,v.使得u能达到v,或者v能达到u,当然,u,v中互相可达也是可以的。 分析:选择一个强联通分量肯定是血赚不亏的,因为里面的点都是互相可达的。我们先进行缩点,得到一个DAG图,结点的权值是该联通分量里面点的数量。题目转化为在这个DAG上求最长路。 那么算法就很容易实现了,先Tarjan缩点,然后建立一个新的图,注意,可能会有重边,所以我们不能用邻接表处理,用一个邻接矩阵表示新图。在新图上求DAG上的最长路即可。 代码: #inclu原创 2021-05-29 18:52:11 · 125 阅读 · 0 评论 -
HDU 2767 Proving Equivalences(强联通分量)
题意:给出n个点,m个边,问你添加多少条边,才能让这张图变成一个强联通分量图。 分析:想这个题的时候总是在想有向树和DAG的区别,貌似有点启发…我们知道,强联通分量内的点是互相可达。u能去v点,那么v点一定可以绕一大圈回去.也就每个点的入度和出度都至少是1. 按照这个性质,我们可以从点的类型切入这题。 首先进行缩点(Tarjan大法好),得到一个DAG图.然后统计每个点的入度和出度。如果某些点的入度和出度不同时大于等于1,说明它一定不在最终构造完毕的强联通图里,需要加边。 加一条边的影响是让其中的一个点出度原创 2021-05-29 14:12:22 · 175 阅读 · 0 评论 -
紫书例题11-7 UNIX插头 (A Plug for UNIX)
题意:n个插座,m个设备,k个转换器。现在你要把这些设备插到插座上,每个设备都有对应的插头类型,使用转换器就可以“转化”插头类型。转化器的数量是无限提供的,就是插头类型可以任意转化。现在问你最少剩多少个不匹配的设备。 分析:n个插座,m个设备,两两匹配,我们不难想到这是类似于一个二分图的结构。让我们把n个出现的插座连上超级源点,但多于n的插座(会有多的)不能连上源点。再把设备连上汇点.再把插座类型连上设备。 最后,就是设备之间是可以相互转化的。我们使用最短路算法floyd求一下各个点之间的连通性。得到一个连原创 2021-05-21 20:40:02 · 192 阅读 · 0 评论 -
UVAlive 3523 Knights of the Round Table(蓝书系列)
题目:有n个骑士,然后有三个骑士以上可以开会。会议的人数应该是奇数个。然后给出m对关系,表示哪些骑士间不能一起开会。问你有多少个骑士一个会也开不了。 分析:先处理哪些骑士不能坐在一起,那么余下的就可以坐一块了,连一条无向边,表示这两个骑士间可以一起开会。题目转化为求建完图后,有哪些点不属于任何一个奇圈上。 奇圈?我们知道偶圈的性质。当且仅当一个图是二分图是,它的所有圈都是偶数。也就是,二分图上是没有奇圈的。 同时,我们知道在一个无向图的圈里面,所有的结点都是双联通的,也就是处于一个双连通分量里面。这样原创 2021-05-29 13:46:00 · 263 阅读 · 1 评论 -
网络流拆点法和分配结点和超级源点汇点的应用
有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料。现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料。(1 <= f <= 100, 1 <= d <= 100, 1 <= n <= 100) 一种显然的想法是所有食物连源点,所有饮料连接汇点,然后让牛为中间结点,跑一次最大流.但是这样会出现一个牛用了多个食物和饮料的情况。 这种情况下我们把牛拆成两部分(i,N+i)i部分.原创 2020-12-08 14:32:33 · 387 阅读 · 0 评论