Codeforces 876E National Property ——(2-SAT)
摘要:在这题上不是标准的“a或b”这样的语句,因此需要进行一些转化来进行建边。同时在这题上点数较多,用lrj大白书上的做法会T,因此采用求强连通分量的方法来求解(对一个点,如果其拓扑序大于其为真的那个点,则这个语句为真,都相同则无解,否则为假)。AC代码如下:
阅读全文
HDU 6041 I Curse Myself ——(仙人掌图,tarjan,转化)
摘要:题解见这个博客:http://blog.csdn.net/ME495/article/details/76165039。 复杂度不太会算。。这个经典问题的解法需要注意,维护队列里面只有k个元素即可。另外,tarjan对无向图仙人掌图缩点(即只把所有环变成一个点)得注意一下(栈得手写才能实现要求,这是
阅读全文
Codeforces Round #420 (Div. 2)
摘要:A题,水题,只要暴力即可,要注意的是题意要理解清楚。 B题,枚举每一个x作为矩形的右边,那么其中的贡献是可以用等差数列累和公式计算的,最后对所有可能的答案取一个max即可。该题很友好,使用floor没有被卡精度= =。 C题,由于题目是保证了一定能够使得满足要求,那么如果remove的时候这个栈不是
阅读全文
2015 ACM Arabella Collegiate Programming Contest
摘要:题目链接:https://vjudge.net/contest/154238#overview。 ABCDE都是水题。 F题,一开始分类讨论,结果似乎写挫了,WA了一发。果断换并查集上,A了。 G题,状态压缩DP,不难写,但是时限有点紧,读入也比较恶心。。值得注意的是计算一个数二进制下有几个1可以用
阅读全文
2-SAT两题
摘要:看了大白书,学习了一下two-sat,很有意思的算法。题目就是大白书上的两题。 仅仅放一下代码作为以后的模板参考。 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #include <vector> 5 usin
阅读全文
POJ 3694 Network ——(桥 + LCA)
摘要:题意:给n个点和m条边,再给出q条边,问每次加一条边以后剩下多少桥。 分析:这题是结合了LCA和dfn的妙用。_dfn数组和dfn的意义不一样,并非访问的时间戳,_dfn表示的是被访问的顺序,而且是多线程访问下的顺序,举个例子,同一个点分岔开来的点,距离这个点相同距离的点,他们的_dfn的值是相同的
阅读全文
HDU 4738 Caocao's Bridges ——(找桥,求联通块)
摘要:题意:给你一个无向图,给你一个炸弹去炸掉一条边,使得整个图不再联通,你需要派人去安置炸弹,且派去的人至少要比这条边上的人多。问至少要派去多少个,如果没法完成,就输出-1。 分析:如果这个图是已经是多个联通块了,那么一个人都不用去,如果不是,那么只要找出这个无向图上的桥并且哨兵数量最少的那座把它炸了就
阅读全文
HDU 4635 Strongly connected ——(强连通分量)
摘要:好久没写tarjan了,写起来有点手生,还好1A了- -。 题意:给定一个有向图,问最多添加多少条边,让它依然不是强连通图。 分析:不妨考虑最大时候的临界状态(即再添加一条边就是强连通图的状态),假设这时候的边的数量是F,那么答案就是F-m(m是一开始边的数量)。因此,F越大,答案越大。那么,怎么考
阅读全文
UVA 10029 Edit Step Ladders ——(DAG求最长路)
摘要:题意:升序的给出一本若干个单词,每个单词都可删除一个字母,添加一个字母或者改变一个字母,如果任意一个操作以后能变成另外一个字典中的单词,那么就连一条有向边,求最长的长度。 分析:DAG的最长路和最短路在算法竞赛入门里边原原本本有的,结果我现在忘记了,,真是太弱了。。方法就是,用map对应键值(以建图
阅读全文
HDU 4612 Warm up —— (缩点 + 求树的直径)
摘要:题意:一个无向图,问建立一条新边以后桥的最小数量。 分析:缩点以后,找出新图的树的直径,将这两点连接即可。 但是题目有个note:两点之间可能有重边!而用普通的vector保存边的话,用v!=fa的话是没办法让重边访问的,因此,使用数组模拟邻接表的方法来储存边。 这样,只要访问了一条边以后,令E[i
阅读全文
HDU 3394 Railway —— (点双联通,记录块信息)
摘要:这题是比较模板的找点双联通并记录的题目。 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数;2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数。 分析:1.即桥的条数;2.找出点双联通分量,在他们内部找重复的边,或者换句话说,找出所有点双联通分量,
阅读全文
POJ 3177 (Redundant Paths) —— (有重边,边双联通,无向图缩点)
摘要:做到这里以后,总算是觉得tarjan算法已经有点入门了。 这题的题意是,给出若干个点和若干条边连接他们,在这个无向图中,问至少增加多少条边可以使得这个图变成边双联通图(即任意两点间都有至少两条没有重复边的路径可以到达,可以经过同一个点。这个条件等价于每一条边都至少在一个环中)。 方法:将无向图缩点以
阅读全文
UVA 796 Critical Links —— (求割边(桥))
摘要:和求割点类似,只要把>=改成>即可。这里想解释一下的是,无向图没有重边,怎么可以使得low[v]=dfn[u]呢?只要它们之间再来一个点即可。 总感觉图论要很仔细地想啊- -一不小心就弄混了。。 另外从这题发现,代码还是写成模块化比较好,比如solve一个函数,init一个函数等等,这样可以避免很多
阅读全文
POJ 1144 Network —— (找割点)
摘要:这是一题找无向图的割点的模板题,割点的概念什么的就不再赘述了。这里讲一下这个模板的一个注意点。 dfs中有一个child,它不等于G[u].size()!理由如下: 如上图,1的size是2,但是它的child是1,因为对他进行dfs时,顺序是1-2-3...然后再等到它访问它的第二个节点3时,3已
阅读全文
POJ 1236 Network of Schools —— (缩点的应用)
摘要:题目大意:有N个学校和一些有向边将它们连结,求: 1.最少需要向几个学校发放软件,使得他们中的每一个学校最终都能够获得软件。 2.最少需要增加几条有向边使得可以从任意一个学校发放软件,使得每一个学校最终都能够获得软件。 分析: 1.缩点以后,找出入度为0的点的个数即可(因为没人可以给他们软件)。 2
阅读全文
UVA 247 Calling Circles —— (强连通分量模板题)
摘要:第一个强连通分量的题。 题意:有一堆人,a给b打电话表示a有一条向b的边,一个强连通分量代表一个电话圈,把每个电话圈里的人在一行内输出出来。 直接上模板即可,但是要注意把string用map映射一下的技巧。 代码如下: 但是搞不懂的是为什么注释掉的输出部分是错的呢- -
阅读全文
【模板】强连通分量和tarjan算法
摘要:看了好久才终于明白了这个算法。。复杂度是O(n+m)。 我觉得这个算法不是很好理解,但是看懂了以后还是觉得听巧妙的。 下面给出模板代码和三组简单数据帮助理解。 代码如下: 三组数据如下:
阅读全文
2016"百度之星" - 初赛(Astar Round2A)1006 Gym Class(HDU5695)——贪心+拓扑排序
摘要:分析:首先,利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面。其次,对于a的前面不能为b,那么只能a在b前面了,那么就建立一条从a到b的边,并且b的入度加1。然后就是拓扑排序了。要分数最高,则把哪些入度为0的点(他们不需要有哪些人一定要在他们前面,最自由)丢进优先队列,然后就可以实
阅读全文