摘要:
第一次试手,就知道求割边,结果各种TLE,还改了向量为邻接表。其实问题是没有想到缩点之后是一棵树,之后每条树边都是割边,一遍dfs./**State: HDU2242 281MS 1604K 2899 B*题目大意:* 给一个有重边的无向图,然后要求判断能否删除一条边使图分为* 两个部分。图中每个点都有权重,如果可以分成两个部分,求这* 两个部分差值的最小值。*解题思路:* 先用tarjan缩点,把强连通分量都缩成点,因为强连通分量是不能* 删除一条边使图分开的。缩点之后就是一棵树,之后在这棵树上进行* 记忆化... 阅读全文
摘要:
这道题目主要是构图,之后就是水水地求连通分量个数了,用广搜,用深搜,用并查集都行,不过并查集效率要高。/**State: HDU1198 46MS 372K 2322 B C++ *题目大意:* 给定A~K个固定的小方块,方块中有水管,然后要求凑这些小方块成为* 一个大矩形,求最后形成的连通分量数目。*解题思路:* 主要是构图比较特别。枚举每个小方块构图,最后用dfs查连通分量数即可。* 图可构为无向图。*解题感想:* 好像用map慢了许多。第三次优化用了并查集,果然0ms了,连建图都省了*/并查集版本:View Code ... 阅读全文
摘要:
/**State: HDU3861 46MS 1468K 3001 B C++ *题目大意:* 给定一个含有n个点的有向图,然后要求把这个有向图分为多个图,* 要求如果图中有两个点能够互相到达的,必须把它们分为同一个图。* 然后要求分割出来的图中,任意两个点之间一定可以互达。*解题思路:* 题目要求如果图中两个点可以互达,要分为同一个图,那么可以先* 求出强连通分量,然后缩点。之后就是一个ADG,用笔画了很久,发现* 一个ADG要分为多个分量,然后每个分量重每两个点有路径通过,最* 最小分量,其... 阅读全文
摘要:
/**State: HDU1269 46MS 1428K 1364 B*题目大意:* 给一个n个点,m条边的有向图,判断该图是否为强连通图*解题思路:* 用tarjan,但是要注意该图可能有连通分量。*/View Code 1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <stack> 5 using namespace std; 6 7 const int MAX = 10005; 8 vector<int> vec[MAX]; 9 阅读全文