随笔分类 - 图论——————Tarjan
摘要:gate 用时:断断续续地debug,大概用了120min? 板子题. 求将一个无向图变成边双联通图最少的加边数. 结论:设原图叶子节点(入度为1的)的数量为x,答案即为(x+1)/2 证明:将叶子节点两两相连. 首先tarjan求出所有强连通分量,只保留割边. 缩点后判断有多少入度为1
阅读全文
摘要:gate 用时:大概60min 睡前随便水一发博客,摸了 有向图,一个点向其他点连边(传递信息)。 问:1.至少选多少点作为源点,使所有点都能收到信息。2.至少连多少边,使任选一点作为源点,都能使所有点收到消息。 显然每个强联通分量内的点可以互相到达,所以先缩点。 1的答案即为入度为0的点的个数。
阅读全文
摘要:gate tarjan判环,若一对夫妻在同一scc中则不稳定。 构造成有向图, 当前婚姻状况 女→男 连边,曾经交往的 男→女 连边。 代码如下 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #includ
阅读全文
摘要:传送门 SAT(Satisfiability)问题: 有n个bool变量,m个需要满足的条件,形如“xi为true || xj为false || xk为 false…”。 给每个变量赋值,使得所有条件得到满足。 SAT问题已被证明为NP完全,只能暴力枚举求解。 特别地,如果每个条件中约定的变量
阅读全文
摘要:(他羊) Tarjan是一种dfs算法。 有向图的强联通分量 如果一个有向图的子图中,任意两点可以相互到达,那么这就组成了一个强联通分量。 在Tarjan算法中,需要维护一个栈stk, 每个节点有两个值:dfn[],即dfs序;low[],表示这个节点最多经过一条横叉边能到达的dfn最小的点的dfn
阅读全文