tarjan强联通分量
tarjian强联通块,割点,桥,缩点等
吃花椒的妙酱
热爱算竞的ACMer一枚~
会分享比赛题解和自己做的项目
展开
-
LibreOJ - 10096 抢掠计划
传送门题目大意:给定n个点,m条边的有向图,每个点有权值,给点起点和若干终点,求从起点到某一终点的路径,使得路径权值最大,边可重复走思路:缩点由于可重复走的缘故,对于环我们缩点问题转化为一棵树,求权值最大的路径如果是权值最小,显然用迪杰斯特拉求最短路,类似的,我们可以求最长路。不过用迪杰斯特拉不行,取负也不行,因为用迪杰斯特拉的前提就是不能有负权边,我们可以用spfa(树,不存在负权环)//tarjan缩点#include <iostream>#include原创 2021-05-06 22:55:11 · 757 阅读 · 0 评论 -
CodeForces - 1000E
传送门无向图有n个点,m条边,每条边可以派一个boss驻守,可以选择任意的起点和终点,求放置的最多boss数,使在起点到终点到必经路上都能遇见思路:缩点环内所有边都不属于必经路,因为你可以选择顺时针或者逆时针走环,所以每条边都不是必经路,即可以将环缩点缩点后就是一棵树,要求最多的boss数,即求最长一条路径,毋庸置疑是树的最长直径。问题转化为求树的最长直径,跑两遍dfs,第一遍求最长直径的一个端点(此时求得离起点最远的点是最长直径的一个端点),第二遍从求得的端点开始跑求最长直径。原创 2021-05-06 20:11:27 · 111 阅读 · 0 评论 -
p2746校园网Network of Schools
传送门思路:缩点所谓接受列表,即说明是有向图。环内的学校是互通的,对于子任务A,缩点后求入度为0的强联通块数量即可。题目求的最小发送次数,即考虑最好的情况,发送到一个强联通块后,可以继续向其他快传输,如果入度为0就得重新发送了。对于子任务B,求max(入度为0的强联通块数,出度为0的强联通块数)即可。问的是最少加几条有向边,让整张图强联通,如果存在多个强联通块,那么每个块的入度和出度至少其一不为0,否则无法实现任意的传送,所以需要对应的增加出边和入边,对于出入度都不为0的块,我们原创 2021-05-06 16:06:59 · 105 阅读 · 0 评论 -
受欢迎的牛G
传送门思路:缩点,思维喜欢的关系可以看成单向边(略伤感),所以整道题可以看成有向图,求出有多少个点能被其他所有点直接或间接抵达。对于环内的所有点是互相喜欢的,可以缩点,缩点后就不存在互相喜欢的情况了,即两个强联通块之间不存在双向边,因为如果存在,他们两个就联通了。被所有点喜欢的那个连通块必定出度为0,因为其他的连通块都指向它,问题就转化为求出度为0的强联通块的大小,如果存在多个出度为0的块,那就输出0,因为块之间独立了,也就不存在被所有点指向的情况了//tarjan缩点 找权值最大原创 2021-05-06 14:22:30 · 139 阅读 · 1 评论 -
【模板】缩点
给定一个n 个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。传送门//tarjan缩点 找权值最大的路径#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <cstdio>#inclu...原创 2021-05-06 13:21:15 · 101 阅读 · 6 评论