马克飞象莫名其妙无法同步到印象笔记,现在这里保存一下吧。Training Day2@(ACM集训)A.How far away ?(Tarjan LCA)题意:无向图,给定边及边权重,任意两点之间都有一条唯一的道路,道路上每个点只能出现一次。给定询问,求询问的结点之间的距离。分析:路上每个点只能出现一次,可以转化成有根树,问题也即为求最近公共祖先问题~~ 这里每条边加上了距离,求出LCA后,用u、v...
分类:
其他好文 时间:
2016-07-10 18:43:57
阅读次数:
205
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页)。 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联通分量里面只有这一道题。 题目是这样的: 这是一个有向图上的问题,这道题很容易看出来一个爱心天使就是 ...
分类:
其他好文 时间:
2016-07-10 12:36:08
阅读次数:
202
将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数。 对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上。因此删除它之后,这些边就从非桥边变成了桥边。 枚举每条非桥边跑Tarjan计算答案即可。 时间复杂度$ ...
分类:
其他好文 时间:
2016-07-09 01:54:42
阅读次数:
234
2-SAT。 tarjan缩点。强连通分量的点要选一起选。 #include #include #include using namespace std; const int maxn = 20000 + 10; const int maxm = 200000 + 10; int n,m; int ... ...
分类:
其他好文 时间:
2016-07-07 21:07:27
阅读次数:
145
2-SAT。 好像很复杂的样子所以还在慢慢摸索。。。 这道题只需要tarjan缩点就可以了,如果有一个材料的满式和汉式同时被选中,代表不可能实现。 #include #include #include using namespace std; const int maxn = 5000 + 10; ... ...
分类:
Web程序 时间:
2016-07-07 19:49:41
阅读次数:
209
给出n个点和m条边,一条一条地删除边,问每次删除以后有多少个联通块。 分析:其实就是并查集的应用,只是前一阵子一直做图论思路一直囿于tarjan了。。方法就是,记录每一条边,然后从最后一条边开始不断的加边,如果用并查集来判断联通块有没有减少即可。 代码如下: ...
分类:
其他好文 时间:
2016-07-07 17:05:04
阅读次数:
166
思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用tarjan ...
分类:
其他好文 时间:
2016-07-05 22:09:21
阅读次数:
258
tarjan、并查集、树状数组、树链剖分。 时间倒流,变删边为加边。 先求一波边双联通分量,缩点。 题目保证最后还是整张图联通的。。所以就是一棵树。 现在的操作就是,将路径上的边权置0(加边时),查询两点间边权和。 可以转换成求根到点路径上边权和,置0的时候,就相当于将子树内的值都减去原边的长度,可 ...
分类:
其他好文 时间:
2016-07-05 22:02:06
阅读次数:
359
2-SAT,复杂度是O(m),每个点分成2个点,代表选或者不选,然后建图有个原则,就是一条有向边x->y代表x选了y必选,然后建图完tarjan,如果有2个点在同一个环中,无解,否则建立反向图拓扑排序,搜到一个点,就把他对立点和后继全部选为不选。 ...
分类:
其他好文 时间:
2016-07-02 15:59:40
阅读次数:
218
其实就是手打了个Tarjan的模板 输出的时候注意是入度为0的点的个数和max(入度0的个数,出度0的个数),在n=1时特判为0即可 ——以后图论要渐渐模板化,方便使用 ...
分类:
Web程序 时间:
2016-07-01 21:30:30
阅读次数:
172