图论-深度优先遍历
lab104_yifan
这个作者很懒,什么都没留下…
展开
-
UVA 1364 - Knights of the Round Table(双连通+二分图判定)
UVA 1364 - Knights of the Round Table题目链接题意:有n个圆桌骑士,知道一些骑士互相憎恨,现在要开圆桌会议,每次最少3个人,必须是奇数人数,并且互相憎恨的骑士不能在相邻,问有多少骑士是一次都无法参加的思路:把每个骑士可以相邻的连边,然后做双连通分量,然后对于每个连通分量,利用二分图染色判定去判断是否是奇圈代码:#inclu原创 2014-08-29 15:21:13 · 926 阅读 · 0 评论 -
【图论】强连通专题总结
强连通总结定义:一个有向图中,一个图可以分成几个分支,每个分支的任意两个结点如果都有路径使得互相可达,那么称这个分支为强连通分支现在要给一个有向图,求出强连通分支,可以利用Tarjan发明的算法求出强连通分支之后,可以根据题目,把每个强连通分支进行缩点,缩点之后的图会变成一个有向无环图(DAG),就可以进行一些算法(如DP, 最短路,最小生成树之类的)模板:原创 2014-10-21 18:53:13 · 2387 阅读 · 7 评论 -
【图论】双连通总结
双连通总结这类问题分为,边-双连通,点-双连通边双连通边双连通,求出来后,连接没一个双连通的分量的就是割边,因此可以缩点成一棵树,把问题转化为在树上搞,割边的定义为:去掉这条边后图将不连通基本这类题都一个解法,求双连通分量,然后缩点成树,进行操作或者就是直接要求割边,做跟割边相关的操作模板:#include #include #include原创 2014-10-28 21:11:48 · 1225 阅读 · 0 评论 -
HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
HDU 3861 The King’s Problem题目链接题意:给定一个有向图,求最少划分成几个部分满足下面条件互相可达的点必须分到一个集合一个对点(u, v)必须至少有u可达v或者v可达u一个点只能分到一个集合思路:先强连通缩点,然后二分图匹配求最小路径覆盖代码:#include #include #include #includ原创 2014-10-19 23:30:51 · 931 阅读 · 0 评论 -
HDU 3639 Hawk-and-Chicken(强连通)
HDU 3639 Hawk-and-Chicken题目链接题意:就是在一个有向图上,满足传递关系,比如a->b, b->c,那么c可以得到2的支持,问得到支持最大的是谁,并且输出这些人思路:先强连通的缩点,然后逆向建图,对于每个出度为0的点,进行dfs求哪些点可达这个点代码:#include #include #include #include #i原创 2014-10-20 12:43:43 · 810 阅读 · 0 评论 -
HDU 1269 迷宫城堡(强连通)
HDU 1269 迷宫城堡题目链接题意:中文题思路:强连通模板题代码:#include #include #include #include using namespace std;const int N = 10005;int n, m;vector g[N], scc[N];int pre[N], lowlink[N], sccno[原创 2014-10-19 16:17:42 · 823 阅读 · 0 评论 -
HDU 1827 Summer Holiday(强连通)
HDU 1827 Summer Holiday题目链接题意:中文题思路:强连通缩点,每个点的权值为强连通中最小值,然后入度为0的点就是答案代码:#include #include #include #include #include using namespace std;const int N = 1005;const int INF =原创 2014-10-19 22:01:39 · 815 阅读 · 0 评论 -
POJ 2375 Cow Ski Area(强连通)
POJ 2375 Cow Ski Area题目链接题意:给定一个滑雪场,每个点能向周围4个点高度小于等于这个点的点滑,现在要建电缆,使得任意两点都有路径互相可达,问最少需要几条电缆思路:强连通缩点,每个点就是一个点,能走的建边,缩点后找入度出度为0的个数的最大值就是答案,注意一开始就强连通了答案应该是0代码:#include #include #incl原创 2014-10-20 19:40:38 · 1061 阅读 · 0 评论 -
POJ 2762 Going from u to v or from v to u?(强连通+拓扑)
POJ 2762 Going from u to v or from v to u?题目链接题意:给定一些有向图,要判断该图是否满足任意两点,要么u能到v,要么v能到u思路:先缩点,然后拓扑排序,排序过程中如果队列中有任意时刻点大于2个,就代表出现分支了,肯定就不行了代码:#include #include #include #include #in原创 2014-10-20 21:02:51 · 785 阅读 · 0 评论 -
POJ 3160 Father Christmas flymouse(强连通+DP)
POJ 3160 Father Christmas flymouse题目链接题意:给定一个有向图,每个点有权值(可能为负),现在要求一条路径,走过每个点可以选择获得或或得该点权值,一个点最多获得一次,问一条最大值的路思路:图有环,所以先缩点,然后就是DAG最长路了,dp搞搞就可以了代码:#include #include #include #inclu原创 2014-10-20 22:16:29 · 695 阅读 · 0 评论 -
POJ 1236 Network of Schools(强连通分量)
POJ 1236 Network of Schools题目链接题意:题意本质上就是,给定一个有向图,问两个问题1、从哪几个顶点出发,能走全所有点2、最少连几条边,使得图强连通思路:#include #include #include #include using namespace std;const int N = 105;int n;v原创 2014-10-20 16:24:51 · 721 阅读 · 0 评论 -
POJ 3180 The Cow Prom(强连通)
POJ 3180 The Cow Prom题目链接题意:其实读懂题目就简单了,本质上就是求强连通分支点大于1的个数思路:知道题意就简单了,直接强连通搞代码:#include #include #include #include #include using namespace std;const int N = 10005;int n, m原创 2014-10-20 23:06:37 · 746 阅读 · 0 评论 -
POJ 3592 Instantaneous Transference(强连通+DP)
POJ 3592 Instantaneous Transference题目链接题意:一个图,能往右和下走,然后有*可以传送到一个位置,'#'不能走,走过一个点可以获得该点上面的数字值,问最大能获得多少思路:由于有环先强连通缩点,然后问题转化为dag,直接dp即可代码:#include #include #include #include #inclu原创 2014-10-21 11:42:08 · 803 阅读 · 0 评论 -
POJ 2186 Popular Cows(强连通)
POJ 2186 Popular Cows题目链接题意:一个奶牛,之间有互相仰慕的关系,如果A仰慕B,B仰慕C,意味着A也仰慕C,问有多少奶牛被所有奶牛仰慕思路:强连通缩点,点权为连通集合个数,如果出度为0的点个数大于1个,答案就是0,如果等于1个,答案就是那个点的权值代码:#include #include #include #include #i原创 2014-10-20 18:52:49 · 832 阅读 · 0 评论 -
POJ 2553 The Bottom of a Graph(强连通分量)
POJ 2553 The Bottom of a Graph题目链接题意:给定一个有向图,求出度为0的强连通分量思路:缩点搞即可代码:#include #include #include #include #include using namespace std;const int N = 5005;int n, m;vector g[N原创 2014-10-20 17:37:34 · 930 阅读 · 0 评论 -
HDU 2460 Network(双连通+树链剖分+线段树)
HDU 2460 Network题目链接题意:给定一个无向图,问每次加入一条边,问个图中还剩多少桥思路:先双连通缩点,然后形成一棵树,每次加入一条边,相当于询问这两点路径上有多少条边,这个用树链剖分+线段树处理代码:#include #include #include #include using namespace std;#pragma co原创 2014-10-23 13:53:40 · 1283 阅读 · 0 评论 -
HDU 4005 The war(双连通好题)
HDU 4005 The war题目链接题意:给一个连通的无向图,每条边有一个炸掉的代价,现在要建一条边(你不不知道的),然后你要求一个你需要的最少代价,保证不管他建在哪,你都能炸掉使得图不连通思路:炸肯定要炸桥,所以先双连通缩点,得到一棵树,树边是要炸的,那么找一个最小值的边,从该边的两点出发,走的路径中,把两条包含最小值的路径,的两点连边,形成一个环,这个环就保证了最低原创 2014-10-23 20:46:35 · 1149 阅读 · 0 评论 -
POJ 3177 Redundant Paths POJ 3352 Road Construction(双连通)
POJ 3177 Redundant Paths题目链接题意:给定一个连通无向图,问加几条边能使得图变成一个双连通图思路:先求双连通,缩点后,计算入度为1的个数,然后(个数 + 1) / 2 就是答案(这题由于是只有一个连通块所以可以这么搞,如果有多个,就不能这样搞了)代码:#include #include #include using namesp原创 2014-10-24 10:43:52 · 1037 阅读 · 0 评论 -
UVA 1108 - Mining Your Own Business(双连通分量)
UVA 1108 - Mining Your Own Business题目链接题意:给定一个连通图,设置一个些安全点,使得其他任意一些节点崩塌后,其他点都能到一个安全点,问安全点最小数量和情况数思路:#include #include #include #include #include using namespace std;const int N原创 2014-08-29 20:50:08 · 1547 阅读 · 0 评论 -
UVA 12167 - Proving Equivalences(强连通分量+缩点)
UVA 12167 - Proving Equivalences题目链接题意:给定一些已经存在的等价性证明,要求全部等价,需要在多最少几次证明思路:先求出强连通分量,然后进行缩点,在缩点后的图上统计入度和出度为0结点的最大值,就是需要加的边数,注意如果整个图已经是强连通,就直接是答案代码:#include #include #include #incl原创 2014-08-29 21:43:23 · 1034 阅读 · 0 评论 -
HDU 4738 Caocao's Bridges(找割边)
HDU 4738 Caocao's Bridges题目链接注意几个坑,可能重边,至少要派一个人去炸,没有连通的时候就不用炸了代码:#include #include #include #include using namespace std;const int N = 1005;const int INF = 0x3f3f3f3f;int pre[原创 2014-08-29 23:28:57 · 911 阅读 · 0 评论 -
UVA 11396 - Claw Decomposition(二分图判定)
UVA 11396 - Claw Decomposition题目链接题意:给定一个无向图,问是否能把这个无向图分解为如图的爪形,边只能用一次,点能用多次思路:分析一下会发现,其实就是一个二分图判定,把中间的染一个颜色,周围几个就是另一个颜色,由于保证是一个简单无向图,所以做一次二分图判定即可代码:原创 2014-08-30 22:57:57 · 830 阅读 · 0 评论 -
UVA 11324 - The Largest Clique(强连通分量+缩点)
UVA 11324 - The Largest Clique题目链接题意:给定一个有向图,要求找一个集合,使得集合内任意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点思路:强连通分量,构造出scc之后,缩点,每个点的权值是集合点个数,然后做一遍dag找出最大权值路径即可代码:#include #include #include #incl原创 2014-08-30 13:32:52 · 1525 阅读 · 0 评论 -
10765 - Doves and bombs(双连通分量)
UVA 10765 - Doves and bombs题目链接题意:给定一个无向图,每个点的鸽子值为删去这个点后会有几个连通块,问鸽子值前m大的点的鸽子值,如果相同,按编号排思路:就裸的双连通分量,在每个连通分量如果是割顶的点就加一,最后如果答案为0的点,答案应该是1代码:#include #include #include #include #in原创 2014-08-31 10:34:14 · 1099 阅读 · 0 评论 -
UVA 11080 - Place the Guards(二分图判定)
UVA 11080 - Place the Guards题目链接题意:一些城市,之间有道路相连,现在要安放警卫,警卫能看守到当前点周围的边,一条边只能有一个警卫看守,问是否有方案,如果有最少放几个警卫思路:二分图判定,判定过程记录下白点和黑点个数,小的就是要安放的个数,注意如果是0,那么应该是加1代码:#include #include #include原创 2014-08-31 16:17:03 · 1661 阅读 · 0 评论 -
UVA 11504 - Dominos(强连通分量)
UVA 11504 - Dominos题目链接题意:给定一个多米诺骨牌的有向图,为最多要推几个才能全倒思路:强连通分量,缩点后找出度数为0的点就是答案代码:#include #include #include #include #include using namespace std;const int N = 100005;vector原创 2014-08-31 22:22:15 · 1441 阅读 · 2 评论 -
UVA 10972 - RevolC FaeLoN(边-双连通分量)
UVA 10972 - RevolC FaeLoN题目链接题意:给定一个无向图(不一定全连通),现在把边定向,问还要添加几条边使得图强连通思路:先求出边-双连通分量,每个连通分量都能定向,然后缩点,转化为欧拉回路,如果每个点度数都是大于等于2的偶数就是回路,也就是强连通了,所以计算度数为0和1的个数,一条边能增加两个度数,所以答案为所以只要再添加上(a + 1) / 2 +原创 2014-09-01 11:22:43 · 1816 阅读 · 0 评论 -
UVA 610 - Street Directions(割边)
UVA 610 - Street Directions题目链接题意:给定一个无向图,要求把尽可能多的边定向,使得形成一个强连通图,输出定向后的图,不能定向的边就变成两条有向边思路:找出割边,只有割边是需要定成两条的,其他的双连通分量中,边肯定都可以定向,然后在dfs不经过割边打印路径,最后在打印出割边(拆成两条)代码:#include #include原创 2014-09-01 00:15:55 · 1666 阅读 · 2 评论 -
UVA 10510 - Cactus(有向仙人掌图判定)
UVA 10510 - Cactus题目链接题意:给定一个有向图,问这个图是否为仙人掌图(一条边不属于两个及以上环)思路:类似构造scc的dfs,判定方法为:1、必然是一个强连通分量2、一个环上的节点必然只能经过一次那么dfs的时候,只要记录下每个结点的父亲结点,如果遇到一个结点之前遍历过了,那么就回退的找到改结点,把环上的结点都+1(注意当前结点不算,因为原创 2014-09-01 16:27:08 · 1552 阅读 · 0 评论 -
HDU 2242 考研路茫茫——空调教室(边双连通)
HDU 2242 考研路茫茫——空调教室题目链接思路:求边双连通分量,然后进行缩点,点权为双连通分支的点权之和,缩点完变成一棵树,然后在树上dfs一遍就能得出答案代码:#include #include #include #include #include using namespace std;const int N = 10005;const i原创 2014-10-22 10:23:19 · 1574 阅读 · 3 评论 -
POJ 3114 Countries in War(强连通+最短路)
POJ 3114 Countries in War题目链接题意:给定一个有向图,强连通分支内传送不需要花费,其他有一定花费,每次询问两点的最小花费思路:强连通缩点后求最短路即可代码:#include #include #include #include #include #include using namespace std;const i原创 2014-10-21 17:19:05 · 1212 阅读 · 0 评论 -
HDU 3849 By Recognizing These Guys, We Find Social Networks Useful(双连通)
HDU 3849 By Recognizing These Guys, We Find Social Networks Useful题目链接题意:说白了就是求一个无向图的桥思路:字符串hash掉,然后双连通,要注意特判一下如果不是一个连通块,那么答案是0代码:#include #include #include #include #include原创 2014-10-23 14:22:42 · 840 阅读 · 0 评论 -
POJ 1904 King's Quest(强连通)
POJ 1904 King's Quest题目链接题意:n个男人,每个人都有一个喜欢的女人列表,现在给一个完美匹配,问所有完美匹配中,每个人可能娶到的女人列表思路:强连通,建图,男的连一条边指向女,然后完美匹配的边女的指向男,然后求强连通,在同一个强连通分支并且是自己想娶的的就可能娶到代码:#include #include #include #inc原创 2014-10-21 16:23:09 · 1185 阅读 · 0 评论