连通性问题
笑对这个世界的志贵
这个作者很懒,什么都没留下…
展开
-
【Kosaraju && 连通分量】POJ - 2186 Popular Cows
Problem Description 给你n,m分别代表n头牛,接下来有m行,每行牛u和牛v之间的关系(代表牛u认为牛v是红人)* 如果牛u认为牛v是红人,牛v认为牛c是红人,所以牛u认为牛c也是红人*。 思路:求出连通分量缩点 也就是强连通分量压缩成一个点的DAG图,只要判断图是连通的,出度为0的强连通分量(里面包含的牛的个数就是结果),Kosaraju算法 先将原图dfs一遍,越接近图的尾翻译 2017-08-02 08:29:07 · 266 阅读 · 0 评论 -
【边双连通分量 && LCA】POJ - 3694 Network
Problem Description 输入n,m分别代表有n台电脑,m条线路。接下来m行,每行u,v代表u-v之间有线路连接。输入q,代表有q次访问,每次访问输入u,v问你连接u-v后,还有几个桥 思路: LCA是用来求缩点u - 缩点v之间有多少条桥先按边双连通分量缩点,按照缩点后建图,然后以1为根,建树,求每个点的父亲和深度。接着就是求LCA,经过过的点标记一下(经过的点另外构成了边双翻译 2017-09-19 11:35:50 · 387 阅读 · 0 评论 -
【求最小权值割边】HDU - 4738 Caocao's Bridges
Problem Description 输入n, m代表有n个岛屿,m条边,接下来m行,u,v,w,代表岛u-岛v之间有w人。有人需要去把岛屿炸分开,只能炸一次,如果炸一次分不开输出-1。如果能炸分开,让你输出派出最少的人(排出的人数,大于等于岛屿之间的人数,才能炸开)。 思路: 很裸的求割边的题目,但是需要注意几个点。如果岛屿已经分开,输出0,如果没有割边输出-1,如果岛与岛之间没有人至少翻译 2017-09-19 11:22:32 · 413 阅读 · 0 评论 -
【强连通 && 最多可以加几条边使得图不为强连通图】HDU - 4635 Strongly connected
Problem Description 输入T组测试数据,每组测试数据输入n,m分别代表n个点,m条边。 接下来m行,每行u,v代表u->v有一条单向边,问你最多可以加多少条边,图不能是强连通图。 思路: 要使得图不为强连通图,那么至少得有两个缩点,这题核心就在于,将图如何分成两个缩点,使得边最多。一开始,我的思路,将图缩点,然后找到点最少的缩点。令它为一个缩点(由Min个点构成),其翻译 2017-09-18 21:34:58 · 637 阅读 · 0 评论 -
【边双连通 && 树的直径】HDU - 4612 Warm up
Problem Description 输入n,m代表有n个点,有m条边。有重边,这里重边指的是1-2,1-2如果出现了两次,代表1-2有两条不同的道路接下面m行,每行u,v代表u-v有一条道路(双向)。问你加一条边,最少还剩下多少个桥 思路: 树的直径参考:http://blog.csdn.net/Triple_WDF/article/details/50118115 将图按双连通分量缩点翻译 2017-09-18 19:49:00 · 411 阅读 · 0 评论 -
【边双连通 && 加几条边变成边双连通】POJ - 3177 Redundant Paths
Problem Description 输入n个点,m条边,边有重复,问你最少添加几条边,可以使得任意两个点,至少有两条不同的路径到达。其实就是问你最少添加几条边,使得图变成边双连通 思路: 卡了挺久的,就因为有重边,还以为是自己的代码错误。求边双连通的姿势不对。既然有重边,缩点(边双连通缩点)后 判断度得思考思考,有两种方法,一种是用邻接矩阵存边,这样重边就没事了,第二种方法就是,有桥就代翻译 2017-09-18 11:34:08 · 503 阅读 · 0 评论 -
【强连通分量模板题 && 加几条边变强连通】POJ - 1236 Network of Schools
Problem Description 给你N个学校的网络,接下来N行,每行输出整数,以0退出。代表第i个学校的网络能到达这n个整数。(1)要你输出至少需要几个学校网络就可以遍布所有学校网络。(2)如果想学校网络能够两两相互到达至少需要加几条边(其实就是将整个图变成强连通需要加几条边) 思路:求出强连通分量缩点(DAG图),(1)入度为0的点的个数代表第一问题的答案。(2)找出入度为0点的最大个翻译 2017-08-02 08:44:31 · 448 阅读 · 0 评论 -
【割点 && dfs】UVALive - 7456 Least Crucial Node
Problem Description 给你n,s,m分别代表n个点,s为特殊点,m条边。让你求去掉那个点?使得其他点不能到达s点的点最多。如果存在割点,一样多的。输出编号最小的。 思路: 割点的条件, low[to] >= low[u],u就是割点。所以我们求出割点后,我们可以根据这个条件去dfs,low[to]>=low[u]的to点,这些点都不能到达特殊点。我们记录个数。求出最大个数对翻译 2017-08-23 14:07:01 · 236 阅读 · 0 评论 -
【割边 && 桥】UVA - 796 Critical Links
Problem Description 给你n个点的图,让你求出有几个桥,按字典序大小输出 思路:会了割点,割边就是改一下 low[v] > dfn[u] 代表,u-v是割边, 裸的模板题,就不弄注释了,心累,看不懂代码,先去看割点#include<bits/stdc++.h> using namespace std; #define mm 10004 struct node { int翻译 2017-08-04 10:48:32 · 213 阅读 · 0 评论 -
【割点】UVA - 315 Network
Problem Decription 很裸的求割点 个数的题目。第一行给你n,代表该图有n个点。接下来每行给你一个u,u == 0退出循环,给你很多v,代表u到v有一条无向边。 思路:num[]数组记录该点第几个走到(num[]值是不变的),low[]值是不断更新的,最开始等于num[]值,找到祖先了也就是更小的num[]的时候就更新。回溯的时候和孩子的low[]值比较更新,因为孩子能到的地方,翻译 2017-08-04 10:40:59 · 205 阅读 · 0 评论 -
【tarjan思想 && 离线处理】Codeforces Round #436 (Div. 2) F - Cities Excursions
Problem Description 给你n个城市m条单向的道路,q个访问。 问你u城市到v城市字典序最小的路径的第k个城市。 不存在路径的情况: u->v城市的过程中存在一个使字典序一直变小的环。 u根本无法到达v。 思路: 一开始想到肯定是dfs,但是不知道如何跑,看了一些大佬的博客才知道如何处理。 我们预处理一下,所得dfs所走的下一个点,一定是字典序最翻译 2017-12-23 10:15:35 · 215 阅读 · 1 评论