
tarjan
!
fffefw
这个作者很懒,什么都没留下…
展开
-
有向图求强连通分量
在图中找到一个最大的子图,使这个子图中每个两点都能够互相到达,这个最大的子图称为强连通分量,同时一个点也是属于强连通分量的。主要是通过dfs来实现的,在dfs的过程中维护了几个东西:一个stack用来存访问过的节点,就是靠栈来存的强连通分量的节点的,要一个dfn数组用于记录节点的时间戳,每个节点的dfn值是不会变的,还有最后一个是low数组,我的理解是对于low[i]来说,low[i]记录的是包含...原创 2018-08-04 09:43:18 · 388 阅读 · 0 评论 -
poj1236
这题题目意思就是给你n个学校,然后还有这n个学习之间的发送接受关系,然后问你最少需要给多少个学校发送软件可以令全部学校都得到软件,然后又问至少需要加多少条边才能做到,给任意一个学校软件,然后所有学校都得到软件。 第一问的意思就是问你图上有多少个入度为0的强连通分量。第二问的意思就相当于是问最少需要加多少条边才能使整个图成为一个强连通分量,即是图上任意两点可以到达。做法就是先求出每个强连...原创 2018-08-04 13:45:25 · 1038 阅读 · 1 评论 -
POJ 1659 Frogs' Neighborhood(度序列构图)
题目大意就是有n个点以及n个点对应的度序列,问你能不能根据这个度序列构造一个图(无向图).这题用到了Havel-Hakimi定理,一边判断一边建图,先把顶点按度数从大到小排序 ,一个度数大的顶点它后面存在度数个顶点的话,那是可以构图的,否则不行,然后度数大的点和它后面一个点(no[i].index)相连,那么no[i].du--,如果出现了-1就说明不可图了,否则可图,那么就将2点相连。...原创 2018-08-04 14:31:58 · 273 阅读 · 0 评论 -
poj2553
题意的关键是Here are some new definitions. A node v in a graph G=(V,E) is called a sink, if for every node w in G that is reachable from v, v is also reachable from w.,就是叫你求出度为0的强连通分量的元素。话说这题的数据太水了,我的ta...原创 2018-08-04 16:38:09 · 332 阅读 · 0 评论 -
poj 2186
题意就是找受其他全部牛欢迎的牛的数量,一个牛如果受其他全部牛欢迎的话,那么其他牛肯定可以到达该牛,在同一个强连通分量的牛是肯定可以到达它的,但是其他强连通分量的就不一定了,如果有一个强连通分量1,要是有一个强连通分量2有一条出边连到强连通分量1,那么强连通分量1里牛的个数就是受欢迎的个数,因为此时强连通分量2里的牛都可以到达强连通分量1里的牛,但是强连通分量1里的却不能到达强连通分量2里的牛,...原创 2018-08-04 19:12:51 · 326 阅读 · 0 评论 -
浅谈tarjan的应用
无向图{ 求边双连通分量(边bcc)/割边求点双连通分量(点bcc)/割点无向图\begin{cases}\ 求边双连通分量(边bcc)/割边 \\ \\求点双连通分量(点bcc)/割点\end{cases}无向图⎩⎪⎨⎪⎧ 求边双连通分量(边bcc)/割边求点双连通分量(点bcc)/割点有向图{ 求强连通分量(scc)有向图\begin{ca...原创 2019-09-26 00:29:44 · 223 阅读 · 0 评论 -
无向图求点双连通分量/割点
假设DFS中我们从顶点U访问到了顶点V(此时顶点V还未被访问过),那么我们称顶点U为顶点V的父顶点,V为U的孩子顶点。在顶点U之前被访问过的顶点,我们就称之为U的祖先顶点。显然如果顶点U的所有孩子顶点可以不通过父顶点U而访问到U的祖先顶点,那么说明此时去掉顶点U不影响图的连通性,U就不是割点。相反,如果顶点U至少存在一个孩子顶点,必须通过父顶点U才能访问到U的祖先顶点,那么去掉顶点U后,顶点U...原创 2019-09-26 22:45:16 · 461 阅读 · 1 评论 -
无向图求边双连通分量/桥
在无向图中,去掉了i号边,连通块数量增加了,那么i号边就是桥。#include<bits/stdc++.h>using namespace std;#define ls rt<<1#define rs (rt<<1)+1#define PI acos(-1)#define eps 1e-8#define ll long long#define...原创 2019-09-27 22:12:46 · 349 阅读 · 0 评论 -
hdu2242 (边双缩点)
题意:给出n个点和m条无向边,每个点都有权值,要求去掉一条边,使得整个图变成两个连通块,并且两者的权值总和之差最小**思路:**首先去掉的边必定是桥,无桥的话对应无解,有桥的话,把边双都求出来缩点,然后dfs一遍统计答案#include<bits/stdc++.h>using namespace std;#define ls rt<<1#define rs (rt...原创 2019-09-29 19:46:10 · 368 阅读 · 1 评论