随笔分类 -  图论--------------------------

摘要:【算法】点双连通分量 【题解】详见《算法竞赛入门竞赛入门经典训练指南》P318-319 细节在代码中用important标注。 #include<cstdio> #include<algorithm> #include<vector> #include<stack> #include<cstring 阅读全文
posted @ 2016-11-11 20:21 ONION_CYC 阅读(339) 评论(0) 推荐(0)
摘要:【算法】边双连通分量 【题意&题解】http://blog.csdn.net/geniusluzh/article/details/6619575 (注意第一份代码是错误的) 一些细节: 1.判断桥只能在树边判断,不能在反向边判断,体现在程序中注释的wrong位置。 2.标记桥要双向标记。 3.第二 阅读全文
posted @ 2016-11-10 21:17 ONION_CYC 阅读(265) 评论(0) 推荐(0)
摘要:【算法】(强连通分量)并查集 【题解】 1.用tarjan计算强连通分量并缩点,在新图中找入度为0的点的个数就是答案。 但是,会爆内存(题目内存限制64MB)。 2.用并查集,最后从1到n统计fa[i]==i的数量即是答案。(n个点n条有向边,连通子图个数就是答案) (tarjan) #includ 阅读全文
posted @ 2016-09-23 19:26 ONION_CYC 阅读(252) 评论(0) 推荐(0)
摘要:【题意】给定n个点的有向图,求可达点对数(互相可达算两对,含自身)。n<=2000。 【算法】强连通分量(tarjan)+拓扑排序+状态压缩(bitset) 【题解】这题可以说非常经典了。 1.强连通分量(scc)内所有点可互达,对答案的贡献为cnt[i]*cnt[i](cnt[i]第i个scc内点 阅读全文
posted @ 2016-09-21 21:07 ONION_CYC 阅读(437) 评论(0) 推荐(0)
摘要:【题意】给定n个点m条边的有向图,求多少个点能被其它所有点到达。n<=10000,m<=50000。 【算法】强联通分量(tarjan) 【题解】如果有k个点能从除自己外的所有点到达(即k个答案点),那么这k个点一定在一个连通块中。 tarjan缩点构建新图,那个所有答案点都被缩成了一个点。出度为0 阅读全文
posted @ 2016-09-20 13:36 ONION_CYC 阅读(231) 评论(0) 推荐(0)
摘要:【算法】最小生成树 #include<cstdio> #include<algorithm> using namespace std; const int maxn=310; struct cyc{int from,to,pre,k;}e[100010]; int fa[maxn],head[max 阅读全文
posted @ 2016-08-12 21:58 ONION_CYC 阅读(236) 评论(0) 推荐(0)
摘要:【算法】最大生成树+LCA(倍增) 【题解】两点间选择一条路径最小值最大的路径,这条路径一定在最大生成树上,因为最大生成树就是从边权最大的边开始加的。 先求原图的最大生成树(森林),重新构图,然后用一个超级根连向每棵树的根。 对于每个询问,在树上跑z=LCA(x,y),答案就是x到z,z到y路上的最 阅读全文
posted @ 2016-08-12 21:46 ONION_CYC 阅读(273) 评论(0) 推荐(0)
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡 阅读全文
posted @ 2016-08-10 21:08 ONION_CYC 阅读(2144) 评论(0) 推荐(6)
摘要:Day1 T1(暴力):大水题 #include<cstdio> const int ok[5][5]={ 0,0,1,1,0, 1,0,0,1,0, 0,1,0,0,1, 0,0,1,0,1, 1,1,0,0,0, }; int a[210],b[210]; int main() { int n, 阅读全文
posted @ 2016-08-10 08:20 ONION_CYC 阅读(431) 评论(0) 推荐(2)