强联通分量
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
POJ 2186 强联通分量
点击打开链接题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其他所有牛喜欢思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG,而拓扑序的值为DAG的长度,则加一,但是最后我们要判断一下这些牛是不是被所有牛喜欢,因为等于DAG长度的所有点肯定是一个强联通分量,因此它们可以相互喜欢,我们用其中一只牛判断就行了,判断时就用反向边判断这个牛能不能到达其他的牛就行了#i原创 2016-04-02 15:43:54 · 703 阅读 · 0 评论 -
HDU 3861 强联通分量+最小路径覆盖
点击打开链接题意:将所有的点分入几个集合中,要求若u可以到v,且v可以到u,那么u和v必须在一个集合中,且集合中的点必须满足对于任意一个点对(u,v)u能到v或者v能到u,问最少的集合满足条件思路:因为u到v且v到u必须在一个集合,那么可以用强联通分量进行缩点,然后下一个条件是对集合中的所有点对,那么这个集合可以形成的肯定是一条链类型的集合,那么就可以转化成选择几条链可以将所有的点(这个点原创 2016-07-27 09:07:03 · 533 阅读 · 0 评论 -
HDU 1827 3072强联通分量
点击打开链接题意:中文思路:因为是有向的传递,那么直接强联通先缩点,之后需要打电话的人数就是缩完点后的入度为0的所有点,然后最小费用就是在每一个联通分量中找出一个费用最小的全部相加即可#include #include #include #include #include #include using namespace std;typedef long long ll;t原创 2016-07-27 09:44:20 · 312 阅读 · 0 评论 -
HDU 3639 强联通分量
点击打开链接题意:给一个有向的图,然后找出一个最大的值,这个值是对于一个点来说,能够到达它的点的个数,如果有多个符合按照字典序输出这些点思路:因为是个有向图且边比较多,如果暴力弄的话无疑会超时,而强联通可以很好的减少多于的边,而强联通后对于一个联通分量来说我们将里面的个数记录下来,然后将图反着建一下(一会说为什么),这样我们现在的图就是一个边较少的图,而每个分量的元素个数就是点权,然后现在原创 2016-07-16 18:39:56 · 127 阅读 · 0 评论 -
HDU 2242 强联通分量+树形DP
点击打开链接题意:中文思路:题目说切掉一条边使得图分成两部分,也就是割边,那么边双联通模版套入,正好就可以缩点,然后在缩过的图上删除一条边满足题目要求,当然的是若没有割边,就输出impossible就行了,然后树形DP计算出每个点的所有儿子节点的权值即可,计算出最小的值 PS:写的时候以为联通块的编号就是按照块数排下来的,其实不一定,也可能是模版的问题#include #includ原创 2016-07-27 21:13:53 · 1038 阅读 · 0 评论 -
HDU 3849 双联通+Trie树+并查集
点击打开链接题意:给了n个人和m个关系,然后找出所有的桥并输出思路:简单的找桥就行了,然后人的编号就可以用Trie树来完成,最后坑点如果图不连通输出0,联通性用并查集就行了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef原创 2016-07-29 19:24:14 · 436 阅读 · 0 评论 -
HDU 4005 边双联通分量
点击打开链接题意:给一个无向图,然后这个图可以加一条边,现在要求你剪断一条边,使得图不连通,问你剪的这条边的最小费用思路:先将大牛的思路贴出点这里,首先要缩点肯定是没问题的,然后我写了一个多于的树的直径,就是判断这个树是不是一条链(多于的一步),多于缩完点后的这个树,每条边都有一个权值,现在敌人为了使得我们的花费最大,那么他一定是尽量将小的边都连在一起,那么可以先找的最小费用的边,这条边一原创 2016-08-01 10:46:43 · 448 阅读 · 0 评论 -
POJ 2942 点双联通+二分图染色
点击打开链接题意:给n个骑士和m对关系,关系是互相仇恨,现在召开一个圆桌会议,要求相邻的两个人不能有仇恨关系,问有多少骑士不管怎么分配都不能参加会议思路:白书上的经典例题#include #include #include #include #include #include #include using namespace std;typedef long long ll原创 2016-08-17 11:45:43 · 399 阅读 · 0 评论 -
POJ 3114 强联通分量+最短路
点击打开链接题意:给n个点,和一个有向图及边权,若两个点可以相互到达,则他们之间的费用可以为0,然后K个询问,问U到V的最小费用思路:可以相互到达的费用为0,那么直接强联通缩点就行了,然后问最短路,因为询问K最多100,所以可以直接dijkstra一次一次的判断就行了#include #include #include #include #include #include #i原创 2016-08-17 14:59:36 · 460 阅读 · 0 评论 -
UVALive4287 强联通分量新模版
点击打开链接题意:给了一个有向图,然后问你最少添加几条边使得整个图的任意一个点可以到达所有的点思路:换个模版写的这道题目,就是先缩点,对于缩过点的图,答案就是这些点的入度为0的点的个数和出度为0的点的个数的最大值#include #include #include #include #include #include #include using namespace std;原创 2016-08-28 10:00:01 · 542 阅读 · 0 评论 -
POJ 3678 2-sat模板
点击打开链接题意:给定一些关系,然后结果给出,问你是否可以给0到n-1分配0或1使得所有关系成立思路:2-sat的模板题,理论不多说了,然后就是根据给定的关系建边即可#include #include #include #include #include #include using namespace std;typedef long long ll;typedef un原创 2016-10-28 17:10:50 · 583 阅读 · 0 评论 -
POJ 3683 2-sat
点击打开链接题意:给了n个人的结婚时间,然后要有一个D的时间完成一个特殊活动,这个活动只能在开始或者结束之前完成,牧师需要主持这个特殊活动,问牧师是否可以主持n个活动不冲突,若可以输出一种可能的情况思路:挑战程序设计上的例题,对于活动A和B来说,若A开始B开始冲突的话,那么!A V !B为真,然后还有开始和结束,结束和开始,结束和结束这四种情况的式子,然后连边跑scc即可,然后输出的时候c原创 2016-10-28 18:13:05 · 473 阅读 · 0 评论 -
HDU 5934 强连通分量
点击打开链接题意:给了n个炸弹,然后让你引爆其中的炸弹,然后使得所有的炸弹都爆炸,一个炸弹爆炸会使得它半径内的炸弹爆炸,以此类推思路:强连通缩点,然后找入度为0的所有的联通块,然后在联通块内找一个花费最小的即可#include #include #include #include #include #include using namespace std;typedef lo原创 2016-10-29 18:56:00 · 1100 阅读 · 0 评论 -
POJ 3207 2-sat
点击打开链接题意:n个点一次排列在一个圆上,然后给出m对关系,代表a和b可以在圈内连线,也可以在圈外连线,然后问是否可能使得每对关系都有连线且没有线相交思路:对于每两对关系来说,若它们都连圈内的线有交点的话,则说明其中一个必须连圈外的线,那么就是这样连边,然后2-sat跑完判断即可#include #include #include #include #include #incl原创 2016-11-02 18:29:20 · 460 阅读 · 0 评论 -
HDU 3622 2-sat+二分
点击打开链接题意:给了n个点对,每一对只能引爆其中一个,然后所有的点的爆炸半径是一样的,然后要求所有的点的爆炸范围不相交,问爆炸半径最大是多少思路:二分半径的大小,然后判断条件就用2-sat就可以,对于点对A和B,若A和B不能共存,即A,B不能同时取,连边,然后每次判断就可以了,二分可以用精度来做,也可以二分多次已达到结果#include #include #include #i原创 2016-11-02 19:33:55 · 549 阅读 · 0 评论 -
POJ 2553 强联通分量
点击打开链接题意:给一个有向图,然后现在定义一个特殊点,定义为它能够到达的点也都能够到达它,问有哪些点是特殊点思路:有向图问的是相互到达,那么强联通分量先缩点就好了,对于每一个强联通来说,这个分量内的点都是相互到达的,但是若这个联通分量里有一个点与分量外的点相连,那么这个联通分量内的所有点都不满足特殊点,所以我们需要找到那些分量没有出度的#include #include #inclu原创 2016-07-26 20:08:13 · 415 阅读 · 0 评论 -
HDU 2767 强联通分量
点击打开链接题意:问加多少边后图会变成强联通分量为1的图思路:简单的强联通,缩点后找入度和出度就行了,水题#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn原创 2016-05-23 21:24:26 · 4550 阅读 · 0 评论 -
POJ 1515 双联通分量
点击打开链接题意:给一个联通的无向图,然后问你将其中的边变为有向的,加边使其变成有向的联通图思路:若无向图有双联通分量,那么这个分量里的元素可以变成有向图的强联通,这应该很好看出来,然后需要加的边是什么呢,就是这个图上的桥呗,是桥的话变成有向的就要加一条边,然后剩下的无向图的双联通分量可以用dfs搜一下,边搜边输出就可以了,将桥记录下来遇到桥的时候特殊处理一下,然后双联通分量里的边每一条只原创 2016-05-31 15:44:39 · 2472 阅读 · 0 评论 -
HDU 3836 强联通分量
点击打开链接题意:就是问你最少连多少边之后所有点都可以互相到达思路:问的就是强联通的含义,先进行强联通分量进行缩点,如果强联通分量为1,恭喜你图已经联通,输出0即可,否则我们剩下的点是强联通缩点之后的点,其实我们就是可以将这些点当成要联通的点就行了,而现在已经缩过点了,所以我们这个残图只要满足每个点都有出度和入度就可以形成强联通分量为1的图,但是这个判断前提必须是已经缩过点之后的残图,现在原创 2016-04-06 18:10:53 · 802 阅读 · 0 评论 -
POJ 1236 强联通分量
点击打开链接题意:每个点可以传输给下一个点,第一问问你最小需要多少个点就可以将所有点都传输到,第二问问你我只传输给一个点,问最少加几条边,使得所有点可以传输思路:只要一个点的入度为0,那么这个点一定是第一问中要传输的点,所以统计入度为1的点的个数就是第一问,第二问问你加多少边,我们要加入的边就是入度为0的点数和出度为0的点数的最大值,与这题hdu 3836相似,一个缩过点后的图要想联通的话原创 2016-04-11 14:37:59 · 836 阅读 · 0 评论 -
POJ 3180 强联通分量
点击打开链接题意:英语并没有过六级,出这么长的英文题真是没爱了......看看讨论竟然让我求强联通的节点数>=2的个数,为什么题目非要写的人类理解不了......思路:那还要什么思路啊,强联通模版敲完,找一下就行了#include #include #include #include #include #include using namespace std;typedef原创 2016-04-11 16:14:06 · 840 阅读 · 0 评论 -
POJ 1904 强联通分量
点击打开链接题意:不说题意了,直接说它让干什么把,我们要找每个王子可以娶的女人,并且他娶了其中一个剩下的王子依然可以找到老婆,也就是固定一条边后,剩下的关系还是可以构成一个完备二分图,然后每个王子能娶的公主从小到大输出思路:这种题没做过,看了看网上的题解,是要找强联通分量,那么可以肯定的是如果id号王子在强联通分量里,那么这里面的所有公主都满足条件,因为图是王子连公主,公主原创 2016-05-10 19:42:47 · 1130 阅读 · 0 评论 -
POJ 3694 强连通分量+LCA
点击打开链接题意:给一个图,然后依次加进去边,问每次加过边后还有几个桥,之前加入的会影响后面加入的思路:先将图的桥全部找出来,然后将桥的点标记上,然后不需要缩点,直接进行裸的LCA,再找最近公共祖先的时候,遇到标记的点将结果减1,然后将标记取消,不知道为什么我写的跑的特别慢,别人写的都很快,有神犇知道求指教#include #include #include #includ原创 2016-05-11 08:25:51 · 1168 阅读 · 0 评论 -
HDU 4587 割点
点击打开链接题意:给一个无向图,可能是不连通的,问删除两个点之后联通块最多的数量,两个点随意思路:之前写过一个删除一个点的剩余联通块的题目,和这个差不多嘛,但是要注意细节,WA了10多次,对于一个5000个点和5000条边的图来说,我们可以先去枚举删除一个点,然后剩下的操作就和删除一个点的相同了我们找到最大的cnt,cnt记录的是这个点删除后的联通块个数-1;具体细节看代码把,注意这种情况原创 2016-05-11 11:01:48 · 922 阅读 · 0 评论 -
HDU 4685 强联通分量+网络流
点击打开链接题意:与POJ 1904 极其相像的一道题目,POJ的将一个完备匹配图给了你,并给了你一组可能的情况,很简单,但是这道题目,给的既不是完备匹配也没有给出可行的匹配方案,难的不要不要的思路:刚开始看以为是和1904一模一样呢,然而难度上升的真快,看了一下是13年的多校题目,过了10几个把,可想而知这难度不是我等能够A掉的,刚自己想的是只加王子使其变成完备匹配,然后WA了,对了说一原创 2016-05-24 19:27:48 · 4415 阅读 · 3 评论 -
HDU 4635 强联通分量
点击打开链接题意:给一个有向图,问这个图能否为强联通,强联通定义为每两个点可以互相到达,是输出-1,否则输出我最多加多少条边这个图还不是一个强联通图思路:判断是否强联通很简单,套模版就可以了,强联通分量个数为1则强联通,否则我们可以先将图想象成一个完全图,现在的边数就为V*(V-1);V为点个数,然后我们要删除最少的边使得这个完全图变成非强联通,那么减过后的值就是不是强联通图可以到达的最多原创 2016-05-03 15:00:24 · 693 阅读 · 0 评论 -
POJ 1144 无向图割点模版题
点击打开链接题意:给出一个无向图及边的关系,求割点个数思路:无向图割点纯模版,不多说,这篇写的很好理解点这里#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int max原创 2016-05-03 17:41:50 · 4111 阅读 · 0 评论 -
POJ 1523 无向图割点
点击打开链接题意:给出无向图,问你哪些是割点并输出将这个点割掉后的图分为几块思路:无向图割点的模版题,只不过再将cnt里的值输出而已#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;原创 2016-05-03 19:00:46 · 3724 阅读 · 0 评论 -
ZOJ 2588 求桥的数量
点击打开链接题意:将无向图中的桥找出来,并将他们的输入序号输出思路:模版找桥,但是注意处理重边和后面的输出,别的没什么了,模版题#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;con原创 2016-05-04 15:45:36 · 2843 阅读 · 0 评论 -
POJ 3352 边双联通
点击打开链接题意:题目很长不说了,就是求加几条边后,任意删除一条边后,图还是联通的思路:边双联通分量的定义就是删除一条边后图仍联通,这里推荐这篇点这里写的很详细,而这题就是推荐文章中的构造双联通图中桥的方法,那么我们直接引用,证明看那篇文章把,对于一个联通图,我们求出所有桥,求桥的方法与割点类似,都是求出low和dfs数组完成,我的代码中是L和E数组,将桥删除后的图肯定是多个联通块,而每个原创 2016-05-04 11:26:16 · 1010 阅读 · 0 评论 -
HDU 4738 双联通分量
点击打开链接题意:给出一个无向图和每条边的权值,现在破坏一条路使得图不再联通,只能破坏一条路,问最少需要的花费,花费为边上的权值,注意的是,图刚开始可能不连通,输出1;花费最小的边为0输出1,其他没什么了思路:求桥的模版题,在找到一个桥时更新费用最小,对了还有一个可能有重边,简单~~~#include #include #include #include #include原创 2016-05-04 19:40:00 · 4023 阅读 · 0 评论 -
HDU 4612 双联通分量+树的直径
点击打开链接题意:给一个无向联通图,里面可能有重边,问添加一条边后,使得图中的桥最小,将桥的数量输出思路:刚刚读完题,就有了思路去写,无非就是将联通图双联通分量后缩点,然后求一条最长的路,首尾相连,肯定将更多的桥包含使得这些桥不再是桥,很好想的题,但是错了20+什么鬼,md重边这么难处理,醉了~~~,之前的做法是将重边全部找出来,希望数据弱点水过去算了,TLE好样的,那么我们在处理桥的时候原创 2016-05-05 11:42:01 · 3606 阅读 · 0 评论 -
codeforces 732F 双联通分量
点击打开链接题意:给一个无向图,现在将所有的边变为有向,使得每个点可以到达的点的个数的最小值最大,然后将变好的有向图输出思路:可以知道无向图时在一个连通分量中的点是可以做到互达的,也就是这个联通分量里的点可以变成有向的联通分量,那么现在的图就是一个由好多个连通分量组成的一个树,然后对于割边来说,只有确定它的方向才能找出那个最小值,因为割边为有向了,所以所有的联通块肯定都是指向最大的那个联通原创 2016-11-23 13:19:58 · 703 阅读 · 0 评论