【2017.9.16周总结】
来源:互联网 发布:淘宝下载 编辑:程序博客网 时间:2024/06/04 19:22
Tarjan与缩点
这周做了不少需要先缩点的题。本来10分钟打出来的Tarjan模板,结果缩点各种错。以下都是血与泪的教训
- 关于Tarjan中的易错点:
- 遇到未访问的点则用对方的low更新自己的low
- 遇到访问过且仍在栈中的点才用对方的dfn更新low
这两种情况并不互为补集,不能写成一个if-else
。
重新连边要考虑是否允许重边
若要过滤重边,最好用set
来存边,用rang-based loop
遍历
(自环一般都要过滤:if (group[u] != group[v]) addedge(u,v);
)做任何拓补序问题之前,先查看题目是否保证DAG,否则需用Tarjan缩点。
点分治
最基础的静态点分治框架大概长这个样子:
bool vis[] = {};int size[], max[], son[]; //son[x]表示x的重儿子int dfssize(int x, int fa) { //dfs处理以上3个数组 //遇到已vis就不再前进了。即 if (!vis[v] && v != fa)}dfs(int x, int fa, ...);cal(int x, ...);void divide(int x) { int Size = dfssize(x,0); //x只是一个入口。这个函数为找root做铺垫 int root = x; while (max[root]] > Size/2) //找root root = son[root]; dfs(root,...); //解决关于整块的问题。通常先由dfs把信息(如dis)记录到一个数组或数据结构中, cal(root,...); //再由cal()进行一些排序、统计等操作。 vis[root] = true; for_each e(root, v) { dfs(v,...); //需要扣除当路径两端出自同一子树的情况 cal(v,...); //dfs时慑于vis[root]的阻拦,自然不会越出子树 }}
阅读全文
0 0
- 【2017.9.16周总结】
- 第16周总结
- 16周大总结
- 16周---期末总结
- 周中总结--2017.9.12
- 10月16 周总结
- 第16周-学期总结
- 2017.9总结
- 总结16
- 周总结
- 周总结
- 周总结
- 周总结
- 周总结
- 周总结
- 周总结:
- 周总结
- 周总结
- 数据库事务的四大特性
- Spring事务配置的五种方式--很好的总结
- mysql千万级数据库插入速度和读取速度的调整记录
- 第三方库、SDK混淆总结
- spring cloud准备linux常用命令
- 【2017.9.16周总结】
- JSP(4)内置对象&动作标签
- 51nod 1095 Anigram单词
- struts学习:使用拦截器
- windows 8下mysql主从同步设置
- 子div设置float,父div不再增加高度,需要给父元素加个overflow:hidden属性
- mysql之show engine innodb status解读
- 数据库的ACID原则(ACID Principles for Databases)
- BZOJ 3713 [PA2014]Iloczyn 枚举