图论
Alstein
十年oi一场空,不开longlong见祖宗
展开
-
hdu2767(利用tarjan将图变成强连通图)
题目题意:求解将一个图变成强连通图需要添加的最小边数思路:首先用tarjan将图缩点变成DAG,既然是强连通图,那么每个点都应该能进也能出,所以统计一下出度,入度为0的点的数量,要求边数最少,所以取max(innum,outnum)作为答案;#include<bits/stdc++.h>#include<map>const int maxn = 3e4 + 10;...原创 2020-02-05 12:36:40 · 175 阅读 · 0 评论 -
tarjan算法求解强连通分量
参考基本概念:强连通:有向图G中,如果某个结点v1有一条到v2的路径且v2有一条到v1的路径,则称这两个点强连通;强连通图:若有向图G中任意两个点都强连通,则称G是强连通图; 强连通分量:有向图的极大强连通子图称为强连通分量,注意是极大而非最大,这包含了两个意思:1.有向图的强连通分量可以有多个;2.如果选取了某个子图G2且G2强连通,但在图G中还存在一个点v,使得v和G2中任意一个点强连...原创 2020-02-04 16:38:13 · 186 阅读 · 0 评论 -
poj3228(并查集)
题目一开始题都没读懂,“maximum adjacent distance”把我给整懵了。。。题意:给一个图,图中一些点有黄金,一些点有放黄金的仓库,但有容量限制,问把所有黄金都能装进仓库的路径中权值最大的那条路是多少。思路:这道题可以用并查集,先记录输出黄金的城市个数num,并用sum[i]表示第i个点是输出黄金还是输入黄金,把黄金所有量或者仓库存储量都给并查集的头,在合并的时候,出现了输出...原创 2020-02-03 10:50:59 · 143 阅读 · 0 评论 -
codefocers Equidistant(多源bfs)
题意:给定一颗n个结点的树和m个树上的节点,问是否存在一个节点到m个点的距离相等,一条边距离为1。思路:首先能想到的是,既然他们到某个节点的距离相等,那么这m个节点一定存在于以该点为根的树的同一层次上,但是就是要如何找这个点,如果正向跑就是从每个点进行bfs,看能不能同时到达m个点,然后t了。。事实上应该从m个点倒着跑都多源bfs,看某个点是否存在于m个点bfs的同一层次上#include&l...原创 2019-11-25 16:20:35 · 203 阅读 · 0 评论 -
poj1679(最小生成树)
给定一个图,询问是否存在不同的最小生成树思路:先用kru或者prim跑一条最小生成树,把最小生成树里面的边存起来,然后每次删除一条边跑最小生成树算法,看跑出来的生成树和之前的是否一样,如果一样就有不同的最小生成树,否则就没有注意:边权为0的边视为图任然联通,但是删除这条边时就不用和原来的比较(因为跑出来的树如果和原来的相等,就代表又来了一个0权边,不能算作和原来的不一样)#include&l...原创 2019-11-03 19:56:59 · 180 阅读 · 0 评论 -
带权并查集+种类并查集
好久没写博客了,差点忘了在哪儿写,不写博客是真的对学过的东西一点印象都没有T_T;丧心病狂的大佬挂了一道种类并查集+dp的题,然而我却连种类并查集是什么都不知道,赶紧学习缩小差距;1.带权并查集(对这两个的关系还有点儿懵,先上再说)就像名字一样,带权并查集就是要多维护一个权值数组;和普通的并查集大同小异,用f[]数组存父节点,val存当前结点到父亲结点的权值,首先是初始化void Ini...原创 2019-10-12 21:24:21 · 1018 阅读 · 0 评论 -
hdu 2647 Reward【拓扑排序】
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6922 Accepted Submission(s): 2139Problem DescriptionDandelion’s uncle is a boss of a facto...原创 2019-07-16 18:56:22 · 77 阅读 · 0 评论