tarjan
文章平均质量分 96
fadsf
scau_sleep(今天写bug了吗?
1.一个退役acmer,老年选手
2. 今天喝水了吗?
3. 会写暴力~比不会写强~比不会写优秀
4.不会三分,喜提铁牌。
5. 失败一次不算什么,胸针为了拯救真由里 和 助手。重来3000多次都可以,那我失败几次,又算什么。(命运石之门)
-------如果说这是命运石之门的意志的话
展开
-
再入无向图的双连通分量(tarjan神犇%%%%%%%%)
一、分类双连通分量重连通分量二、双连通分量(tarjan算法)点连通分量和边连通分量之间没有必然联系割点和桥之间没有必然联系1. 边双连通分量 e-DCC桥:一条边,删掉这条边后,图变的不连通。定义:极大的不包含桥的连通块,称为边双连通分量。性质:性质1:在一个双连通分量里,不管删掉哪条边,都是连通的。性质2:存在两条没有公共边的路径。(插入图片1)2. 点双连通分量 v-DCC割点:在连通的无向图中,如果把这个点删除,图变的不连通。每个割点原创 2021-03-28 10:40:31 · 158 阅读 · 0 评论 -
白书训练指南 5.2 深度优先遍历 && kuangbin专题九连通图 (qwq,现在才开,太懒了,我不愧是懒狗)
模板:在这里插入代码片1.模板题Network of Schools POJ - 1236 模板题(对于ans2,可以转换为DAG中加最少条边,使得DAG变为强联通图)信息传递 LibreOJ - 2421在求tarjan时,把每个环的长度取一个min2.割点Network UVA - 315求割点的模板3. 桥Critical Links UVA - 796 ...原创 2020-11-04 23:38:46 · 133 阅读 · 0 评论 -
Calling Circles UVA - 247(floyd传递闭包+dfs求连通块 || tarjan 求强连通分量)
Byte.parseByte(string s)Short.parseShort(string s)Integer.parseInt(string s)Long.parseLong(string s)Float.parseFloat(string s)Double.parseDouble(string s)Boolean.parseBoolean(string s)原创 2020-11-07 20:08:19 · 113 阅读 · 0 评论 -
Road Construction POJ - 3352(tarjan 求割点)
Road Construction POJ - 3352题意:给你一个无向图。现在要删除一条边。求最少添加多少条边,可以使得 任意两点之间连通。思路:其实就是删除一个桥后,最少加几条边连通。先求割点。之后利用low数组的性质(缩点)。判断 度数为1的点。ans = ((∑in【i】==1)+1)12(\sum_{}in【i】==1)+1)\frac{1}{2}(∑in【i】==1)+1)21AC#include <iostream>#include <cstr原创 2020-11-06 15:47:24 · 79 阅读 · 0 评论 -
Astronauts UVA - 1391(2-sat)
Astronauts UVA - 1391题意:有n个人,且给出他们的年龄。这些人的平均年龄是x。假如y【i】>= x。那么这个人可以选择 任务 A 或者 任务C。反之。这个人可以选择 任务 B 或者 任务C。现在给出这些人的讨厌关系,互相讨厌的人不可以分配到同一个任务。问:是否可以分配任务给这n个人。思路:可以先抽象,每个人按照年龄无非就是两种类型 :A∣∣||∣∣C or B∣∣||∣∣C。所以可以构造限制条件。假如两个人互相讨厌,如果是同一种类型。那么要满足 一真原创 2020-11-04 23:37:42 · 94 阅读 · 0 评论 -
Now or later UVA - 1146(二分答案 && 2-sat)
Now or later UVA - 1146题意:有n架飞机需要着陆。每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种。第iii架飞机的早着陆时间为EiE_iEi,晚着陆时间为LiL_iLi,不得在其他时间着陆。你的任务是为这些飞机安排着陆方式,使得整个着陆计划尽量安全。换句话说,如果把所有飞机的实际着陆时间按照从早到晚的顺序排列,相邻两个着陆时间间隔的最小值(称为安全间隔)应尽量大。思路:看到最后一句话,显然是二分的套路。那么现在问题是怎么安排:可以二分答案,之后按原创 2020-11-04 23:22:34 · 91 阅读 · 0 评论 -
The Largest Clique UVA - 11324(强连通分量 + 缩点 + DAG上简单dp)
The Largest Clique UVA - 11324题意:给你一张有向图G,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足, 要么 u 可以到达v,要么v可以到达u(u和v相互到达也可以)思路:先求强连通分量。(易知,一个强连通分量里的点都是满足条件的)缩点后,题目就转换成了求一个最长路。(每个结点有权值,权值为该连通分量的节点个数)之后就是DAG的简单动态规划即可。AC#include <iostream>#include <cstring&原创 2020-11-03 13:03:56 · 89 阅读 · 0 评论 -
Proving Equivalences UVA - 12167 (强连通分量 +缩点 )
Proving Equivalences UVA - 12167题意:a,b,c,d。注意每次证明都是双向的,a↔\leftrightarrow↔b, 。。b↔\leftrightarrow↔c,。。c↔\leftrightarrow↔d因此一共完成了6次推导。另一种证明方法是a→\rightarrow→b, 。。b→\rightarrow→c,。。c→\rightarrow→d。。d→\rightarrow→a.只需4次。给你n个命题。现给出m次推导,你至少需要几次推导才能完成整个证明?思路:原创 2020-11-03 12:29:35 · 120 阅读 · 0 评论 -
Mining Your Own Business UVA - 1108(tarjan 点双连通分量&&组合数学)
Mining Your Own Business UVA - 1108题意:本题有n个通道,每个通道连接两个点。现在要求你安插最少的逃脱通道,保证有任意一个点坍塌时,所有的矿工都可以逃脱。思路:可以首先想到求割点之后求 点双连通,可以发现一个 点双连通里只有一个割点时,才用设置逃脱点。特别注意:当只有一个 点双连通分量时,那么要设置两个逃脱点,才可以安全逃脱。Cn2C_{n}^{2}Cn2注意:记得开longlongAC#include <iostream>#incl原创 2020-11-02 12:49:39 · 90 阅读 · 1 评论 -
Knights of the Round Table UVA - 1364(tarjan 无向图 点-双连通分量&&思维)建图+点双+dfs染色
Knights of the Round Table UVA - 1364题意:有n个圆桌骑士。给你m个互相憎恶的关系。相互憎恶的骑士不可以坐在一起,且围起来的圈必须是奇数圈。思路(本题细节比较多):首先a和b相互憎恶,那么我们可以抽象成图,a和b之间没有边(那么现在把 不互相憎恶的骑士 连起来)之后就有了一个图。题目就转换成了求不在任何一个简单奇圈上的结点数。如果图G不连通,应该对每个连通分量分别求解。结论:(证明过程在后面)可以证明在一个双连通分量里,假如B不是二分图,那么它含有奇圈,原创 2020-11-01 15:50:41 · 72 阅读 · 1 评论 -
Redundant Paths POJ - 3177(tarjan 双联通分量)这次是模板总集
Redundant Paths POJ - 3177题意:给你一个无向图。问你最少添加几条边可以达到任意pair之间都是双联通。思路:本题要保证任意pair双联通。可以先求下双联通分量。之后进行缩点。观察下图。蓝点入度为1。那么要保证任意pair双联通。可以按照图里的操作,连两条红边。再考虑下面的情况。那么综合考虑:ans=(∑1bcc−cnt(in[i]\sum_{1}^{bcc-cnt}(in[i]∑1bcc−cnt(in[i]==1)1)1)+1)/2。求出所原创 2020-10-30 22:15:57 · 76 阅读 · 0 评论 -
Critical Links UVA - 796(tarjan求桥)
Critical Links UVA - 796 题意&&思路:就是求桥。反思:对于(%d)。可以先scanf("%s")。之后sscanf(s,"(%d)", &tmp)(字符串输入函数)对于桥的理解。可以用一个pre去存储边的编号。假如当前结点 u是一个强联通的祖先,那么该结点u的前驱(即边就是一个桥)。(tot设置为2,是为了防止根是强联通祖先的情况)AC#include <iostream>#include <cstring>#原创 2020-10-15 19:27:14 · 81 阅读 · 0 评论 -
Network UVA - 315(tarjan求割点)
Network UVA - 315题意&&思路:就是求割点。AC#include <iostream>#include <string>#include <cstring>#include <algorithm>#include <stack>#include <sstream>#define mst(x,a) memset(x,a,sizeof(x))#define fzhead EDGE(int原创 2020-10-15 17:46:55 · 74 阅读 · 0 评论 -
信息传递 LibreOJ - 2421(tarjan,求每个环的min)
信息传递 LibreOJ - 2421题意:给你n个人。每个人会向TiT_iTi传递信息。问:最少经过多少轮后,会有人搜到自己的电话。思路:其实就是求强联通分量时,把每个环的长度取个min。AC#include <iostream>#include <cstdio>#include <cstring>#include <stack>#define For(i,x,y) for(int i=(x); i<=(y); i++)原创 2020-10-14 23:11:29 · 77 阅读 · 0 评论 -
Network of Schools POJ - 1236(kuangbin专题九连通图)tarjan模板题
Network of Schools POJ - 1236 题意:给你一个有向图。叫你求ans1:最少的点,使得所有图内所有的点都可以接收到消息的传递。叫你求ans2:加最少的边,使得整个图变为强联通。思路:先用tarjan缩点对于ans1:那么问题就转换成了求有多少个强联通块为0.对于ans2:这么多强联通块, 把这些整合成一个大的联通块。可以由图中可以得到ans2=max(cnt1,cnt2)ans2=max(cnt1,cnt2)ans2=max(cnt1,cnt2)cnt原创 2020-10-14 21:51:05 · 101 阅读 · 0 评论 -
Cycle HDU - 5215(判环,等学了tarjan,再回来补思路)
Cycle HDU - 5215题意:要你判断是奇数环,还是偶数环。思路:传送门AC#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>#define For(i,x,y) for(int i=(x); i<=(y); i++)#define fzhead EDGE(int _v, int _原创 2020-10-14 12:52:55 · 91 阅读 · 0 评论