2018年2月8日

dfs序

摘要: 两篇入门博客: http://blog.csdn.net/viphong/article/details/50561976 https://www.cnblogs.com/zhouzhendong/p/7264132.html 性质: 1,每个节点的子树范围为in[x]~out[x] 2,每个节点的 阅读全文

posted @ 2018-02-08 15:23 Na_OH 阅读(129) 评论(0) 推荐(0) 编辑

CF920E 补图强连通分量 BFS+set维护

摘要: 题意: http://codeforces.com/problemset/problem/920/E 给你一个补图,问原图有多少强连通分量,然后每个强连通分量有多少元素. 思路: 用set维护还可以更新的元素(也就是还没有访问的元素),用一个数组记录从该节点不能到达的地方,然后就可以为所欲为了. 代 阅读全文

posted @ 2018-02-08 00:50 Na_OH 阅读(285) 评论(0) 推荐(0) 编辑

2018年2月6日

hdoj5876 补图最短路 BFS+set维护还可以更新的点.

摘要: 这里有一篇很棒的博客: http://blog.csdn.net/llzhh/article/details/52516591 谈谈学到的东西: 1,set维护东西真的好用,比如维护还能更新的点 2,关于set的删除 st.erase(iter) 最后还要补充一下map和set的一点知识,就是如果你 阅读全文

posted @ 2018-02-06 16:54 Na_OH 阅读(141) 评论(0) 推荐(0) 编辑

LA4287 tarjan求强连通分量+缩点

摘要: 题意:问至少还需要加入多少条有向边才能变成强连通图. 答案=max(in0,out0),特判scc=1. 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<stack> 4 #define min(a,b) (a<b?a:b) 5 #defi 阅读全文

posted @ 2018-02-06 10:44 Na_OH 阅读(141) 评论(0) 推荐(0) 编辑

2018年2月5日

cf920F SUM and REPLACE 树状数组+set 维护

摘要: 题目: Let D(x) be the number of positive divisors of a positive integer x. For example, D(2) = 2 (2 is divisible by 1 and 2), D(6) = 4 (6 is divisible b 阅读全文

posted @ 2018-02-05 12:33 Na_OH 阅读(142) 评论(0) 推荐(0) 编辑

2018年2月3日

cf920G List Of Integers 二分+容斥

摘要: 题意: 求第k个大于x且与p互素的数,其中k,p,x<=1e6. 思路: 二分+容斥. 二分这个数是mid,然后去检验(x,mid]间有多少个与p互素的数.可以用容斥算出[1,mid]和[1,x]区间内有多少与p互质的数. 代码: 1 #include<bits/stdc++.h> 2 using 阅读全文

posted @ 2018-02-03 21:26 Na_OH 阅读(268) 评论(0) 推荐(0) 编辑

2018年2月2日

cf 919D substring

摘要: 题意: 给一个含n个结点和m条有向边的图。其中每一个结点都有一个小写字母与其对应。定义在一条路径上出现各个字母的最大次数为这条路径的value,求所有路径中最大的value。如果value是无限大,则输出-1。 思路: dp+topo排序. dp[v][ch]为:到v点,字符ch的频率.dp[v][ 阅读全文

posted @ 2018-02-02 09:54 Na_OH 阅读(107) 评论(0) 推荐(0) 编辑

2018年1月29日

2017寒假概率dp训练题

摘要: poj 3744 Scout YYF I 简单题,不难找到递推,设dp[i]为安全达到i的概率,dp[0]=0,dp[1]=1,dp[i]=p*dp[i-1]+(1-p)*dp[i-2],用矩阵快速幂计算,再相乘. 代码: 1 #include<cstdio> 2 #include<cstring> 阅读全文

posted @ 2018-01-29 21:52 Na_OH 阅读(120) 评论(0) 推荐(0) 编辑

2018年1月28日

O(n)求数组中第k大的元素——堆排序

摘要: 建堆:O(n) 询问:O(logn) 建堆复杂度的证明: 首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆。于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,......,1/2^k的向下比较了k次,其中1/2^k 阅读全文

posted @ 2018-01-28 16:29 Na_OH 阅读(667) 评论(0) 推荐(0) 编辑

O(n)求数组中第k大的元素——快排划分

摘要: 利用了快排的划分,以及前面说的那种计数的方法。 1+1/2+1/4+...=2*n #include<cstdio> //1+1/2+1/4+1/8+1/16+...=2*n const int MAXN=1007; void swap(int *x,int *y){ int tmp=*x; *x= 阅读全文

posted @ 2018-01-28 16:11 Na_OH 阅读(212) 评论(0) 推荐(0) 编辑

导航