随笔分类 - 图论—tarjan
tarjan算法博大精深
摘要:这篇博客大部分在写我的错解……明明很简单的一道题,知道正解后10分钟AC,然而几个错解打的想死…… 错解1 WA40: 鬼知道这40分哪来的……这也是考试最后很无奈地交上去的代码,最后剩20分钟时发现这是错的,最后剩7分钟想出错解2,我也是醉了…… 先说一下思路吧,首先跑一边Dijkstra记录1到
阅读全文
摘要:B. 通讯 B. 通讯 B. 通讯 题目描述 “这一切都是命运石之门的选择。” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮)。 为了掌握时间机器的技术,SERN总部必须尽快将这个消息通过地下秘密通讯 网络,传达到所有分部。 SE
阅读全文
摘要:[LOJ#2255][BZOJ5017][Snoi2017]炸弹 看到这题首先想到了线段树优化建边, 我们将可以炸到的炸弹之间连上单向边,然后缩点,拓扑一下什么的就可以求出来每个问题的解了。 虽然不是正解,但貌似可做。 我们可以想一想这道题是否存在一些有趣的性质,可以让我们优化建边。 假设点a在点b
阅读全文
摘要:bzoj3590: [Snoi2013]Quare 根据题意,图中显然不能有桥,所以可以先用tarjan找桥判“imposibal”。 数据这么小,状压吧,我们可以把这个过程看成这样:我们已经有了一个强连通分量,那么我们要把一个点加入进这个强连通分量,可以找到一条包含这个点的链,且让链的两端都在这个
阅读全文
摘要:POJ2942 Knights of the Round Table 开始看错题了,“某些骑士无法出席所有会议”并不是无法出席某个会议, 我们尝试建图,按照题目给的条件,我们可以将相互仇恨的骑士之间建边。那么骑士可以坐在一起的条件就是他们之间没有边。所以我们建出这个图的补图会使解题更加方便。 然后我
阅读全文
摘要:HDU3844 Mining Your Own Business 问题描述John Digger是一个大型illudium phosdex矿的所有者。该矿山由一系列隧道组成,这些隧道在各个大型交叉口相遇。与一些业主不同,Digger实际上关心他的工人的福利,并担心矿山的布局。具体来说,他担心可能会出
阅读全文
摘要:3331: [BeiJing2013]压力 LCA+树上差分,和之前类似的题差不多,就是多了个v-dcc缩点,唯一要注意的就是判断是否是割点,对于不是割点的点,如果他是起点或重点,ans++,和差分没有关系,对于割点,则需要用到差分,注意割点与非割点的答案要分开存储,否则会死的。 另外要注意的是数组
阅读全文
摘要:2208: [Jsoi2010]连通数 对于原图建反图,考虑到有环,tarjan缩点,就得到一张有向无环图,用bitset记录能到某scc的点(原图点),跑拓扑将bitset或(|)下去就可以了,最后答案为∑(bitset中1的个数*scc的大小)。开始考虑错了: 1 for(int i=1;i<=
阅读全文
摘要:[POI2008]BLO 一开始没看懂样例,连去掉的点都算…… 显然如果i不是割点,那么ans[i]=(n-1)*2, 如果i是割点,ans[i]=将i去掉后生成的联通块大小两两相乘的和加上i本身,但这样并不好算,换一种思路,在求割点时记录搜索树中以x为根的子树大小, (式子太长不想打了……)
阅读全文
摘要:int dfn[MAXN],low[MAXN],num,root; int stack[MAXN],top,cnt; bool iscut[MAXN]; int new_id[MAXN],c[MAXN]; vector dcc[MAXN]; void tarjan(int x) { dfn[x]=low[x]=++num; stack[++top]=x; if(x==ro...
阅读全文
摘要:int dfn[MAXN],low[MAXN],cnt; bool isbridge[MAXN]; void tarjan(int x,int edg) { low[x]=dfn[x]=++cnt; for(int i=f(x);i;i=n(i)) if(!dfn[v(i)]) { tarjan(v(i),i); low[x]=mi...
阅读全文
摘要:int dfn[MAXN],low[MAXN],cnt; void tarjan(int x,int edg) { low[x]=dfn[x]=++cnt; for(int i=f(x);i;i=n(i)) if(!dfn[v(i)]) { tarjan(v(i),i); low[x]=min(low[x],low[v(i)]); ...
阅读全文
摘要:int dfn[MAXN],low[MAXN],cnt,root; bool iscut[MAXN]; void tarjan(int x) { dfn[x]=low[x]=++cnt; int flag=0; for(int i=f(x);i;i=n(i)) if(!dfn[v(i)]) { ta
阅读全文
摘要:void tarjan(int x) { dfn[x]=++cnt;low[x]=cnt; vi[x]=1; stack[++top]=x; for(rint i=f(x);i;i=n(i)) if(!dfn[v(i)])tarjan(v(i)),low[x]=min(low[x],low[v(i)]); else if(vi[v(...
阅读全文
摘要:[HAOI2010]软件安装 开始没有看懂题,以为就是个树形依赖背包,打完之后W40,然后才发现它会有还,要用tarjan缩完点后跑背包,要建立一个虚拟节点0连接所有的子图(注意连接的位置)。 但是有个细节卡了我好长时间: 错误示范: 正确代码: 在缩点是记录每个scc的入度,0直接和入度为0的sc
阅读全文
摘要:#2691. 「POI2012」约会 Rendezvous 这题我简直不想说什么了,什么素质,卡常数…… “每个顶点有且仅有一条出边”,所以是一道基环树的题,首先tarjan缩点,在缩完点后的图上求a,b的LCA,如果LCA在环内,求出a,b分别对应环中的哪一个点,显然这两个点中的一个为最优解。 我
阅读全文

浙公网安备 33010602011771号
ヾ(≧O≦)〃嗷~