
连通分量
huanghongxun
这个作者很懒,什么都没留下…
展开
-
POJ 2762 Going from u to v or from v to u? 缩点
问所有点对间是否有单向路可达。缩点以后变成了一个DAG,那么判断入度0的点和出度0的点有几个即可。 然后只有入度0的s和出度0的t各1个点的时候,只有存在一条链从s到t且经过所有的点的时候,图才弱联通。 拓扑排序即可。忽然觉得刚才存模板的帖子没有用了。。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))原创 2016-03-07 22:43:18 · 445 阅读 · 0 评论 -
POJ 3352|Road Construction|边双联通分量|Tarjan
POJ 3352 Road Construction至少加几条边使原无向图边双联通。 tarjan求出边双联通分量后缩点成一棵树。 那么一棵树要实现边双联通显然是叶节点间连边,所以边数是 ⌈leaf2⌉\left\lceil \frac{leaf}{2} \right\rceil#include <cstdio>#include <cstring>#include <algorithm>原创 2016-02-18 21:26:09 · 456 阅读 · 0 评论 -
机房水题欢乐赛 2016-04-26 上午
Command【题目描述】我们现在来讨论一种机器的抽象模型。这种机器有一个有限的状态集S={s0,s1,s2..sn} 和一个有限的指令集C={c0,c1,c2…cm} 。机器在任意时刻都处于某 一种状态s∈S 。同时,机器还有一个转移函数f : S x C->S ,表示机器在当前状态下接 到某个指令之后会转移到的状态,亦即机器在状态s下接到指令c后状态会变成f (s,c)。 现在对于一个机原创 2016-04-25 09:11:46 · 859 阅读 · 0 评论 -
CodeForces 231E|Cactus|边双联通分量|LCA
给定一个仙人掌图,多次询问某两点间的路径数。发现某两点间的路径数就等于2的路径间环的个数的幂。 因此Tarjan缩点后LCA计算路径经过的环的个数即可。#include <cstdio>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;typedef long long ll;const原创 2016-04-21 10:29:37 · 1512 阅读 · 0 评论 -
CodeForces 487E UOJ 30 Tourists Tarjan + 树链剖分
#include #define FOR(i,j,k) for(i=j;i<=k;i++)int read() { int s = 0, f = 1; char ch = getchar(); for (; '0' > ch || ch < '9'; ch = getchar()) if (ch == '-') f = -1; for (; '0原创 2015-11-20 18:35:24 · 1075 阅读 · 0 评论 -
HDU 3749 Financial Crisis 点双连通分量
询问两点间是不联通,还是只有一条路,还是有多条路。 不联通用并查集处理即可。 只有一条路说明经过了割点,求一次点双联通分量,多条路说明在点双连通分量内。#include <cstdio>#include <cstring>#include <set>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;i++)using namespa原创 2016-02-18 23:28:20 · 525 阅读 · 0 评论 -
POJ 1236 Network of Schools 强连通分量
求一个有向图从几个点出发可以遍历整个图、以及至少加几条边使整张图强联通。缩点以后,显然入度为0的点的个数就是第一问的答案。 然后第二问答案显然是入度为0和出度为0的个数的最大值,即出入度为0的点间连条边就可以了。Garbow好像比tarjan快?反正双联通也只会写Tarjan。。#include <cstdio>#include <cstring>#include <algorithm>us原创 2016-03-12 00:34:17 · 611 阅读 · 0 评论 -
POJ 2186 Popular Cows 强连通分量
统计能被其他所有点访问的点的个数。 这里建边是<a,b><a,b> 缩点以后没有出边的就是符合题意的,但是只能有1个连通分量没有出边。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))#define ms(a, b) memset(a, b, sizeof(a))const int N = 10001原创 2016-03-11 18:42:10 · 600 阅读 · 0 评论 -
POJ 2553 The Bottom of a Graph 强连通分量
我一脸懵逼、、、、、 快速读入79ms。。scanf 47ms。。 PE了一次233。题目的这个if真的好魔性。 缩点后无出边的都是符合题意的。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))#define ms(a, b) memset(a, b, sizeof(a))const int N =原创 2016-03-11 18:20:56 · 436 阅读 · 0 评论 -
BZOJ 1093 ZJOI 2007 最大半连通子图 DP
求图的最大半连通子图(什么是半连通参考POJ 2762)。由于在对原图缩点以后,半连通就变成DAG上的一条链。那么答案就是DAG上的最长链。一个DP即可。 注意要处理重边。。#include <cstdio>#include <cstring>#include <algorithm>#include <set>using namespace std;#define FOR(i,j,k)原创 2016-03-08 14:09:35 · 466 阅读 · 0 评论 -
HDU 1269 迷宫城堡 强联通分量模板存放处
为了存一下模板,我决定强行拉低一波博文质量。。#include <cstdio>#include <cstring>#define min(i,j) ((i)<(j)?(i):(j))#define ms(a, b) memset(a, b, sizeof a)const int N = 10001, M = 100001;int h[N], p[M], v[M], cnt, top, t转载 2016-03-07 20:01:25 · 410 阅读 · 0 评论 -
POJ 3694 Network 边双连通分量
给出一个无向图,问每次操作连接一条边后图还有多少割边。初步判断每次连边以后缩点,树边数就是答案。 不过由于割边会在Tarjan的搜索树上,因此加边就是不断地维护搜索树。当将两个点连起来时,两点到其LCA间的边都变成非割边,可以暴力维护。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#de原创 2016-03-18 23:41:24 · 462 阅读 · 0 评论 -
HDU 3394 Railway 点双连通分量
判断有多少条边属于多个环或不属于环。 首先一个双连通分量内,如果边数=点数,那么所有点构成一个环如果边数>点数,那么肯定有多个环,而且所有边都处于多个环内。明天贴代码?RailwayTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s):原创 2016-02-18 23:33:48 · 546 阅读 · 0 评论 -
POJ 3177 Redundant Paths 边双联通分量 缩点
问最少加多少条边使得任意两点间均有2条不同的路连接。 发现,如果两个点在一个边双联通分量内,路就必定至少2条,因此缩点成树,问题转化为将树补成边双联通分量,至少要加多少条边。与POJ 3352实际上一样。但是此题有重边,而判断割边的时候,就不能只判断父亲了,而是要判断反向边,否则重边判断就跪了。#include <cstdio>#include <cstring>#include <algor原创 2016-02-18 22:35:24 · 600 阅读 · 0 评论 -
POJ 3592 Instantaneous Transference 缩点 拓扑图DP
棋盘有些格子有权值,有些不可走,还有一些是传送门可以直接传送到给定点。剩余的均只能向右或向下走。求对角最长路。首先,如果传送门产生了环,那么连通分量内的所有点都是可达的——点可以重复走,所以缩点,新点的权就是原分量内的权和。 然后的DAG跑最长路的很简单了。#include <cstdio>#include <cstring>#include <algorithm>using namespa原创 2016-03-16 18:43:14 · 477 阅读 · 0 评论 -
CodeForces 652E|Pursuit For Artifacts|边双连通分量|缩点
include include include using namespace std;define FOR(i,j,k) for(i=j;iconst int N = 300005, M = 2 * N;struct Graph { int h[N], p[M], v[M], w[M], val[N], dis[N], vis[N], cnt = 0原创 2016-11-12 18:44:35 · 787 阅读 · 0 评论