强连通
Ray.C.L
不开longlong见祖宗
展开
-
矿场搭建(tarjan点双联通分量)
思路:下次一定代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;typedef unsigned long long ull;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#define enter putchar('\n')#define lson.原创 2021-02-25 15:52:45 · 259 阅读 · 0 评论 -
电力(tarjan点双联通)
思路:先求出所有联通块cnt,然后求每个连通块内去除割点后会形成几个新连通块ans,最后答案就是ans+cnt-1代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#define enter putchar(.原创 2021-02-24 11:36:43 · 100 阅读 · 0 评论 -
冗余路径(tarjan双联通)
思路:问加几条边能使原题变成一个边双联通分量。使原题不存在桥,那么我们先求桥,然后遍历所有边,对于每个桥上所在联通分量度数加1,最后的统计所以联通分量中度为1的个数cnt,最后要加的边的数量就是(cnt+1)/2.代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false).原创 2021-02-23 15:17:10 · 254 阅读 · 0 评论 -
银河(tarjian)
思路:这个题目很差分约束,这里不用差分约束,这个图比较特殊可以用tarjian去做,我们发现如果无解就是判断有无正环,先用tarjian缩点,然后判断每个联通分量内有没有正环,如果没有则说明他们的边权都是0,例如a1>=a2>=a3>=a1形成环因为边权不大于0这是a1=a2=a3=0,他的第二问就是求在缩点以后的拓扑图上求最长路,直接递推一遍即可。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using nam.原创 2021-02-22 13:46:29 · 246 阅读 · 0 评论 -
最大半连通子图(tarjan性质)
思路:我们先通过缩点吧原图变成一个DAG图,建完新图以后,就是找最大半连通子图和方案数,用f[i]表示以i为终点的最大半连通子图的内点的个数,用g[i]表示以i为终点的最大半连通子图的方案数,这里我们需要按DAG图的拓扑序的顺序进行遍历,f[i]和g[i]才是正确的,这里需要建图时需要对边进行判重,不然会影响答案。而经过观察发现,tarjan在缩点的过程中,连通块的顺序递减时就是拓扑序。(不做证明) ,求完f[i],g[i]后只需要遍历一遍就可得到答案。代码:#pragma GCC optimize(.原创 2021-02-21 17:42:12 · 238 阅读 · 0 评论 -
学校网络(tarjian强连通)
思路:第一问求要提供几个学校软件才能使所有的学校都能用到软件,我们发现在同一连通块内只需要1个软件,然后不同连通块若可以通向其他连通块那么还是只要1个软件,只有当1个连通块的入度为0时,他才不会被其他连通块传到,所以我们需要多少软件就是找有多少个连通块入度为1,第二问加多少边才能使得都连通,答案是max(出度为0的连通块个数,入度为0的连通块个数)菜鸡能力有限无法证明第二问,只说结论。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> .原创 2021-02-21 14:17:07 · 160 阅读 · 0 评论 -
受欢迎的牛(强连通分量+缩点)
思路:看有多少头牛受其它所有牛欢迎,就是看这个点能不能被其他所有点到达,那么我们求一下他的联通分量,缩点后我们可以发现当只有1个联通分量的出度为0时,那么这个联通分量里面所有点点都可以被其他所有点到达,那么数量就是这个联通分量里面点的个数,当出现1个以上的出度为0 的点,那么此时都不能到达//#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define .原创 2020-11-16 11:10:04 · 285 阅读 · 0 评论 -
Caocao‘s Bridges HDU - 4738(求割边)
思路:题目就是求有没有桥让我们吧他拆了变成不连通,那么就有3种特殊情况,第一种是本身图就不连通我们就不用派人了,答案是0,第二种情况是这个桥0人看守,那么我们还是要派一个人去炸桥,毕竟桥自己不会爆炸,第三种情况是没有割边让我们炸答案就是-1,这里还有处理一下重边比如给你这么个图。如果不处理重边答案可能是2或者0(看先后顺序),但其实答案是-1,所以要处理下重边,一点出现重边那说明这2个点之间必定没有割边。#include <cstdio>#include <cstring>..原创 2020-08-14 11:16:26 · 169 阅读 · 0 评论 -
Redundant Paths POJ - 3177(tarjan双联通)
思路:问我们加几条边能使其每个边双连通,因为是无向图缩点后还是一块ε=(´ο`*)))唉,我们就看有几个环(单个点也算环),那么我们在跑tarjan的时候不跑他的反向边,就能跑出几个环,然后对他缩点,找叶子节点有多少个,然后要加的边就是(n+1)/2#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include原创 2020-07-23 12:59:29 · 113 阅读 · 0 评论 -
Network POJ - 3694(tarjan找桥+LCA)
思路:我们先用tarjan看有多少个桥,我们发现当u,v连起来后,u,v,lca(u,v)可能构成环,构成环后,则u和v所在的连通块中的所有桥失效。我们就不停的找u,v中存在的桥,tarjan在找桥时,若a是割点,那么他的后继b就是将来可能要被连起来的点,我们吧b标记为一个桥。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostrea原创 2020-07-22 19:45:18 · 148 阅读 · 0 评论 -
Critical Links UVA - 796(tarjan求割边)
题意:在计算机网络中,如果至少有两个服务器A和B使得A和B之间的所有网络互连路径都经过L,则将两个服务器互连的链路L被认为是关键的。删除关键链路会生成两个不相交的子网这样子网中的任何两个服务器都可以互连。 例如,图1中所示的网络具有三个标记为粗体的关键链接:0 -1、3-4和6-7。 图1:关键链接众所周知:1.连接是双向的;2.服务器未直接与其自身连接;3.如果两个服务器直接连接或与同一服务器互连,则两个服务器互连。4.网络可以具有独立的子网。 编写一个程序,以查找给定计算机网络的所有关键原创 2020-07-22 15:57:03 · 164 阅读 · 0 评论 -
Network UVA - 315(tarjan求割点模板)
题意:求割点的个数,给你n个点,接下来输入每一行,表示第一个点和其他点相连,0表示输入结束。思路:tarjan求割点#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<queue>//#include<bits/stdc++.h&g原创 2020-07-21 18:38:49 · 142 阅读 · 0 评论 -
Network of Schools POJ - 1236(强连通缩点)
题意:给你一个有向图,1.问你需要从几个顶点走能遍历整张图。2.问你加几条边能把他变成强连通图。思路:求出联通分量进行缩点,缩点后不处于同一连通块的我们连一条边,求入度为0的点有多少就是答案1,求出,出度为0的数量和入度为0的数量的最大值就是答案2.#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#includ原创 2020-07-21 12:05:34 · 125 阅读 · 0 评论 -
POJ1523 SPF (强连通求割点和连通分量数)
蒙蔽分析:求出所有割点的编号和删除割点后的连通分量数在这里插入代码片#include<string.h>#include<algorithm>#define M 1007using namespace std;int low[M],dfn[M],head[M],vis[M],cut[M];//cut记录割点int n,cnt,num,t,root,root_s...原创 2019-07-30 17:47:02 · 172 阅读 · 0 评论 -
【Tarjan缩点+出度判断】HDU - 1827 I - Summer Holiday
。。缩点后判断出度代码#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <vector>#include <queue>#includ...原创 2019-07-29 12:53:49 · 182 阅读 · 0 评论