
图论-有无向图连通问题
文章平均质量分 83
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
hdu3749 Financial Crisis(点-双连通分量)
题意:给你一个(保证输入无重边,无自环)无向图,然后有下面Q条询问,每条询问为:问你u点与v点之间有几条(除了首尾两点外,其他点不重复)的路径.如果有0条或1条输出0或1,如果有2条以上,输出”two or more”.思路:首先如果u点与v点不连通,直接输出0即可. 然后如果u点与v点属于同一个点-双连通分量,输出two or more.(这里有特例,两点一边的点原创 2016-02-04 14:39:56 · 808 阅读 · 0 评论 -
HDU 3072 Intelligence System(强连通分量)
题意:给你一个有向网络,网络中的每条有向边都有一个代价,表示从u向v发信息的代价.现在你要从0号点将信息发到所有的其他点去,问你最小代价是多少.其中如果u与v点可以互达(即属于同一个强连通分量),那么他们之间的通信不需要花代价. 输入保证从0号点能到达所有其他点.思路:求出图中所有强连通分量,缩点,维护每个缩点的最小值相加Trick:此题虽然有重边,可是没影响#include原创 2016-02-04 23:23:39 · 359 阅读 · 0 评论 -
HDU 4635 Strongly connected(强连通分量)
题意:给你一个n个点和m条边的有向图,问你最多添加多少条边能使得该图依然不是强连通的?(若该图初始已经强连通,输出-1)思路:这道题比较特别,是问最多添加多少条边使得这个图依然不是强连通的,显然正着想有点困难,如果反着想就简单多了,反过来其实就是问有一个强连通图,问你最少去掉多少条边使得这个图不是强连通。我们知道一个完全图有n*(n-1)条边,题目给出了m条,这时把各个强连通分量缩点,对于缩点原创 2016-02-05 13:06:42 · 335 阅读 · 0 评论 -
HDU 3639 Hawk-and-Chicken(强连通分量+缩点)
题意:给你一个有向图,如果从u点能到达v点,那么说u是v的粉丝,现在要你按序输出那些粉丝数目最多的点编号.思路:转自网上,写得很详细了 假设该图是一个强连通图,那么任一点都有n-1个粉丝(即n-1个点能到达它).所以我们把该图缩点变成一个新的DAG图. 结论:原图中具有最多粉丝的点一定在新图的那些出度为0的点所代表的分量中.原创 2016-02-05 14:56:06 · 426 阅读 · 0 评论 -
uva796 Critical Links(求桥并按边输出)
思路:模板题...求桥并按边输出#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define N 12005#define INF 0xfffffff#define原创 2016-02-05 22:43:48 · 431 阅读 · 0 评论 -
POJ3694 Network(边双连通+LCA)
题意:给一个n顶点m条边的无向图,有若干条桥,现在有q个询问,每次询问在这个图里面添加一条边,问添加这条边之后剩下的桥的数目有多少思路:百度了很久题解..主要是丝毫不会LCA..做法就是先求出图中的桥和双连通分量,缩点(这里不用真的缩点,其实DFS留下的low和pre数组,记录每个点的父节点就能形成一颗深搜树,只要在出桥的时候标记一下然后LCA的时候利用pre数组就可以,因为u和v的最近公共祖原创 2016-02-05 22:37:24 · 427 阅读 · 0 评论 -
HDU 4612 Warm up(边双连通分量)
题意:n个顶点,m条边(有重边),问增加一条边,使原来桥边减少最多思路:求出图中的边双连通分量,缩点建新图,然后求出这颗树的直径,新加的边应该在直径的两边,这样才能使原图中桥最小。因为重边的原因,在dfs的时候,对于从u到v,在v也一定会有一条路径到u,加一个变量标记一下就可以了。 求树的直径的做法:随便找一个点找与它距离最远的点,然后从这个点出发再做一次,就是树的直径了原创 2016-02-05 20:27:59 · 326 阅读 · 0 评论 -
CodeForces 444A DZY Loves Physics(结论题)
题意:给你一个带边权和带点权的无向图,你需要找到一个最大的子团,使得这个子团的点权和除以边权和最思路:直接猜一波一定是只能选两个点,然后就可以了#includeusing namespace std;const int maxn = 505;double v[maxn];int n,m;double ans;int main(){ scanf("%d%d",原创 2016-05-12 16:43:52 · 420 阅读 · 0 评论 -
CodeForces 659E New Reform
题意:给你一个无向图,现在要求你把边改成有向的, 使得入度为0的点最少,输出有多少个点入度为0思路:脑补一波结论,如果有环的话显然没有点入度为0,其余则至少有一个点入度为0,然后就DFS一波就可以了#include #include #include #include #include #include #include #include #include #in原创 2016-04-01 21:53:17 · 1156 阅读 · 2 评论 -
HDU 3861 The King’s Problem(tarjan+二分图匹配)
思路:首先同属一个州就证明两个城市是强连通的,又要使得对于每一个州里的任何两个城市u、v,都有不经过其他州的路从u到v或从v到u,其实就是一个二分图#includeusing namespace std;const int maxn = 5000+50;int in0[maxn],out0[maxn];vectore[maxn];int pre[maxn],lowlink[m原创 2016-08-16 23:59:10 · 380 阅读 · 0 评论 -
HDU 3594 Cactus(强连通)
思路:判断一个图是否为强连通并且每条边仅属于一个环,我们把边的判断转化为对点的记录,在tarjan的过程里用一个fa数组记录每个结点的父子关系,当我们发现一条回边的时候从这个点向fa回溯,给点++,如果大于一证明这个点同时属于两个环#includeusing namespace std;const int maxn = 20000+50;int in0[maxn],out0[ma原创 2016-08-17 15:21:08 · 437 阅读 · 0 评论 -
poj1904 King's Quest(强连通)
思路:比较显然的做法是二分图匹配然而复杂度太高了,可以这样考虑,如果王子喜欢那个公主的话,那么连一条u->v+n的边,然后由最后的方案里如果王子娶了那个公主的话那么连一条v+n->u的边,然后求一次tarjan缩点就可以啦,为什么这样是可行的呢?参考别人的思路:点击打开链接#include #include #include #include #include #incl原创 2016-09-20 18:07:20 · 366 阅读 · 0 评论 -
hdu5934 Bomb(强连通缩点)
思路:n^2枚举每个炸弹能炸到的炸弹建图,然后跑强连通缩点并且维护这个点的最小花费,缩完点之后的图是一颗有向树,那么直接从入度为0的点开始炸即可#includeusing namespace std;const int maxn = 1005;#define LL long longstruct Node{ LL x,y; LL r; int c;}a[maxn];原创 2016-10-29 17:23:10 · 669 阅读 · 0 评论 -
POJ 2553 The Bottom of a Graph(强连通分量)
思路: 强连通分量题的老套路:求分量,缩点图,输出DAG的相关信息. 该题的答案就是那些DAG中出度为0的点 所代表的分量中包含的所有点.#include #include #include #include #include #include #include #include #include #include #include原创 2016-02-04 22:24:26 · 333 阅读 · 0 评论 -
POJ 2186 Popular Cows(强连通分量+缩点)
题意: 给你一个有向图,现在问你图中有多少个顶点满足下面要求:任何其他的点都有路可以走到该顶点. 输出满足要求顶点的数目.思路:首先我们把图的各个强连通分量算出来,对于分量A,如果A中的点a是那个图中所有点都可以到达的点,那么A中的其他所有点也都符合要求. 所以我们只需要把每个分量缩成一点,得到一个DAG有向无环图.然后看该DAG中的哪个点是所有其他点都可以到达的即可.原创 2016-02-04 21:48:05 · 373 阅读 · 0 评论 -
POJ 2762 Going from u to v …(强连通分量+拓扑排序)
题意:给你一个有向图,问是否对于任意的X,Y两个顶点,可以从X走到Y,或从Y走到X思路:是或!!!如果没有或字的话那么就是简单的判断一个图是否为强连通。有或字了的话就相当于转化为原图中每一个强连通分量之间是否连通的问题。为什么呢,因为强连通分量内部是肯定可以从X走到Y和Y走到X的了。然后缩点,对缩点形成的图最多只能由一个入度为0的点,如果有多个入度为0的点则它们肯定不连通,缩点形成的图是一棵树原创 2016-02-04 19:14:10 · 556 阅读 · 0 评论 -
poj3177 Redundant Paths(边双连通分量+缩点)
题意:给你一个无向连通图,问你至少需要添加几条边能使得该图是一个边双连通图?思路:和之前的poj3352思路一样,首先我们用DFS求出图中的所有的边双连通分量(对于low[i]值不同的点必然属于不同的分量),然后我们把每个分量看成一个(缩)点,就得到了一个缩点树.要使得这颗树变成一个边双连通的,需要添加的边数=(度为1的点数目+1)/2.Trick:这题有重边,先要去重#inc原创 2016-02-04 12:45:20 · 357 阅读 · 0 评论 -
poj3352 Road Construction(边双连通分量)
题意:给你一个连通的无向图,现在问你最少在该图中添加几条边,能使得该图变成边双连通图?思路: 思路主要参照这两个博客 http://blog.youkuaiyun.com/u013480600/article/details/31004741 http://blog.youkuaiyun.com/lyy289065406/article/deta原创 2016-02-04 12:35:58 · 631 阅读 · 0 评论 -
HDU 4738 Caocao's Bridges(重边无向图求桥)
题意: 现在有个(可重边)无向图,无向图的每条边上都有一定数目的守卫,你现在想派人去炸掉这个图的一条边,是的该图不连通。但是你只能炸1条边且如果该边守卫为x人,那么你至少要派x个人过去。所以现在问你最少需要派多少人出发?思路:就是求一个有重边的无向图的桥,有几个比较坑的地方 1,所给的图可能不连通,且不连通的时候不需要炸,输出0原创 2016-02-04 00:04:23 · 1010 阅读 · 0 评论 -
HDU 3849 By Recognizing…(求无向图的桥数目)
题意:给你一个无向图(可能不连通,但是无自环,无重边),如果本图不连通,那么直接输出0。否则要你输出图中的每条桥边,要求按输入边的顺序输出。思路:由于要按输入边的顺序输出,所以只能等DFS之后再输出。 对于边(u,v)来说,只要low[u]>pre[v]或者low[v]>pre[u],那么就是桥Trick:由于有字符串输入,我用的map+string映射,超时了几次原创 2016-02-03 21:31:34 · 556 阅读 · 0 评论 -
hdu4587 TWO NODES(无向图割点)
题意:给你一个无向图,问你从这个无向图中删除任意两个点之后所能获得的独立连通分量个数的最大值.思路:枚举需要删除的第一个点u,然后在这个G-u的新图中,找删除一个点能增加连通分量数量最多的,然后维护最大值就好了吐槽:又忘记初始化TLE了无数次..太弱了..#include #include #include #include #include #include #i原创 2016-02-03 20:29:45 · 351 阅读 · 0 评论 -
POJ 1523 SPF(割点所割连通分量数)
题意:给你一个无向图,问你该图中有多少割点.且每个割点能把该图分为几个连通分量思路:令cut[i]为结点i割了之后生成的儿子数目,如果为根节点,那么如果儿子数大于1的话才算是割点,其他的割点最后分割出来的连通分量数为cut[i]+1#include #include #include #include #include #include #include #inclu原创 2016-02-03 19:01:00 · 338 阅读 · 0 评论 -
POJ 1144 Network(简单求无向图割顶数)
思路:简单的求无向图割点,上模板即可#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 1000#define原创 2016-02-03 12:39:05 · 371 阅读 · 0 评论 -
POJ 2117 Electricity(无向图割点)
题意:给一个无向图,问去掉任意一个点之后最多能有多少个连通分支思路:求原来图的连通分支数+割点数,在模板上修改一点就好了,转一个挺不错的解释: 在dfs的时候,我们用cut[i]==X表示在dfs树中当i节点被删除时,i节点的X个儿子被切割开来(可以认为cut[i]是i节点与它的儿子连接的桥边的数目)。注意:如果i是根且其儿子只有1个,虽然i不是割点,cut[i]依然原创 2016-02-03 17:18:12 · 348 阅读 · 0 评论 -
HDU 1269 迷宫城堡(强连通分量):强连通图判定
题意:中文题思路:判断是否为强连通图,跑一遍tarjan,然后看scc_cnt是否等于1即可#include #include #include #include #include #include #include #include #include #include #include #include #include #include using原创 2016-02-04 16:30:25 · 347 阅读 · 0 评论 -
HDU 2767 Proving Equivalences(强连通分量)
思路:把命题看成结点,推导看作有向边,转换为n个顶点m条有向边的图至少添加多少条边使得这个图强连通 首先找出强连通分量,然后把每个强连通分量缩成一个点,得到一个DAG,设有a个结点的入度为0,b个结点的出度为0,那么答案就是max(a,b)。注意有一种情况为若原图已经强连通了那么输出0#include #include #include #includ原创 2016-02-04 17:19:36 · 329 阅读 · 0 评论 -
POJ 1236 Network of Schools(强连通分量)
题意:题意杀...网络中的一学校可以将软件发送给其他一些学校,能够发送给谁取决于他们各自维护的一个清单。将学校看成一个节点,给出每个学校的维护清单,问至少需要复制几次软件,使毎个学校都能够得到该软件。然后问在清单中至少添加几项,可使软件只要复制一次,所有学校都可以得到思路:和HDU2767一样,最少加多少条边使得图强连通 1. 求出该图的所有强连通分量.原创 2016-02-04 17:36:50 · 255 阅读 · 0 评论 -
HDU 3836 Equivalent Sets(强连通分量)
思路:和HDU2726基本一样#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 20000原创 2016-02-04 17:44:56 · 335 阅读 · 0 评论 -
HDU 1827 Summer Holiday(强连通分量)
题意:中文题不解释思路:先求出图的所有连通分量,然后每个分量缩成一点,构成DAG图,那些入度为0的点(所代表的分量)就是我们需要单独通知的分量.且我们每次都是选择该分量中代价最小的那个点,在tarjan中维护每个分量最小花费吐槽:貌似题目没有加入特别情况,就是如果这个图本来就是强连通的话那么只需要打给花费最少那一个人就行了,加不加这个判断都能AC#include #inclu原创 2016-02-04 18:14:38 · 357 阅读 · 0 评论 -
ZOJ 3795 Grouping(强连通+最长路)
题意:有n个人,m个关系,每个关系表示si的体重>=ti的体重,问你最少划分多少个组,使得这些组里面的人不能直接或者间接和组里的人比体重思路:首先要考虑到一个问题,si>=ti,那么就可能存在几个人的体重都是一样的,那么他们几个人就是等价的,所以需要先缩点,然后就显然的转化成求DAG上的最长路了#include#include#include#include#include原创 2017-01-12 19:41:41 · 449 阅读 · 0 评论