
图论tarjan
Lqingyyyy
这个作者很懒,什么都没留下…
展开
-
51nod2614 小B爱旅行 (参考范艺杰代码 基本抄袭 太难了)
由题意可知 图是由 环 和 直链组成的 若 环能到达 那么 能到达的直链 都能和环组成 一组数 因为 每个到达环的路径再回来 把到环上的直链抵消了 所以我们 可以考虑 把环上的值全都扔进线性基 再看直链上有哪些值是能和环组成新值的 如果 线性基里能组成的 那么链上的就无需加入 若不能组成的 那么 一定会有一位 是线性基里所没有的那么答案就是 (1<<sz) * s.size() s表示线性基组成不了的数的个数 sz表示线性基里的元素个数 2.删边我们可以考虑离线从后往前加边 若加的边多环 那么.原创 2021-09-01 21:42:37 · 198 阅读 · 0 评论 -
51nod 2877熟练使用tarjan的知识
我一开始想到tarjan 没想到咋做 看了题解直呼妙阿 考虑一个点有多个子块 若子块中的点不能回到父节点 那么这个子块 就和 其他子块是不能互相到达的 这时候只需要记录 已经遍历的多少子块即可 这样不会重复 #include<bits/stdc++.h> #define INF 0x3f3f3f3f3f3f3f3f using namespace std; const int N = 1e6 + 10,M = 5e5 + 10; typedef long long ll; typedef .原创 2021-08-06 10:15:32 · 112 阅读 · 0 评论 -
牛客练习赛80D
题目 首先用暴力的思想 就是遍历n然后二分跑tarjan l, m 找到合适的位置 插入进行 这个的复杂度为 n^2logn 所以考虑如何去优化 首先想到的就是倍增 毕竟logn算法也就他了 先用倍增找到合适的区间 复杂度是 nlogn (n为倍增的区间大小) 查找倍增区间里面的合适的范围 又为(nlogn) 所以总体范围即为 2*nlogn #include<iostream> #include<vector> using namespace std; const int N原创 2021-05-05 16:43:17 · 119 阅读 · 0 评论