tarjan
lengxuenong
这个作者很懒,什么都没留下…
展开
-
天天爱跑步——noip2016day1t2
2016年考到一片oier的题目。利用树上的差分来解决这个问题 参考题解:http://www.cnblogs.com/lyzuikeai/p/7451757.html 。先求出两个节点的lca,然后分成向上跑和向下跑两个链。 向上从起点跑到lca,这个过程累加,过了lca,对统计的贡献就没有了,减掉。因此就结点来说统计一个节点有多少人,就观察点i来说,如果观察点的值是wi,需要统计观察点下原创 2018-01-09 15:05:54 · 298 阅读 · 0 评论 -
运输计划2015day2t3
看了gty的题解,写起来还是比较顺的,二分判断的时候判断关系没考虑周全, 参考题解:注意这个题目的特点: 我在哪里修虫洞决定了答案的优劣 答案是多少,我才能好决策哪里需要修虫洞(就好像学习有了目标 才能猛学) 哎呀好纠结怎么办? 如果能把答案固定住,然后再判断可不可行就好了 二分啊 二分一个答案。现在我们的目标是判断答案可不可行。 首先我们检查一下所有的运输线路,有哪些线路是不满足原创 2018-01-12 16:30:56 · 175 阅读 · 0 评论 -
tarjan求lca——luogu3319lca模板与1967货车运输
lca的tarjan求法,与并查集结合,离线完成 #include #include #include #include const int maxn=500009; using namespace std; struct node{ int v,id,next; node(int a=0,int b=0,int c=0):v(a),id(b),next(c){} }edge[2原创 2018-01-04 17:38:49 · 236 阅读 · 0 评论 -
tarjan看了几次了,这次才感觉明白了。
Tarjan算法的操作原理如下: Tarjan算法基于定理:在任何深度优先搜索中,同一强连通分量内的所有顶点均在同一棵深度优先搜索树中。也就是说,强连通分量一定是有向图的某个深搜树子树。 可以证明,当一个点既是强连通子图Ⅰ中的点,又是强连通子图Ⅱ中的点,则它是强连通子图Ⅰ∪Ⅱ中的点。 这样,我们用low值记录该点所在强连通子图对应的搜索子树的根节点的Dfn值。注意,该子树中的元素在栈中一定是原创 2017-12-26 08:59:04 · 823 阅读 · 0 评论 -
tarjan求割点
洛谷P3388 【模板】割点(割顶) #include #include using namespace std; const int maxn=100009; struct node { int to,nxt; } e[2*maxn]; int n,m,cnt=0,index=0,head[maxn],dfn[maxn],low[maxn],iscut[maxn],ans=0; voi原创 2018-01-04 17:28:35 · 210 阅读 · 0 评论 -
tarjan桥与求双连通
poj3117,题目大意增加几条边,将图变为双连通。 分析:无向图跑tarjan,找出双连通,也就是环,然后缩点。缩点后重新处理图,统计叶子节点数leaf,总数即为(leaf+1)/2。 注意坑点:本题的输入数据有重边,但是重边只能作为一条边,要去重。 /* 图的割边 即在一个无向连通图中,如果删除某条边后,图不再连通,则成为割边。 求割边时,只需要将求割点的算法修改一个符号即可。只需原创 2018-01-04 17:34:01 · 271 阅读 · 0 评论