摘要: 状态压缩DP,算sum,本来是枚举的,结果TLE了。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MOD 1000000007 8 int p[10001]; 9 int hash[1 0; j -= lowbit(j))39 {40 hash[i] += hash[i-lowbit(j)];41 if(hash[i] > MOD)42 hash[i] -= MOD... 阅读全文
posted @ 2013-07-27 16:30 Naix_x 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 题目链接比赛的时候一直想用树状数组,但是树状数组区间更新之后,功能有局限性。线段树中的lz标记很强大,这个题的题意也挺纠结的。k = 1时,从a开始,插b个花,输出第一个插的位置,最后一个的位置,一个都没插,输出不能插。k = 2时,将[a,b]区间都清空,输出这个区间上本来有多少朵花。主要是k = 1的时候,很难弄。给出区间[a,b]要找到第一个空花瓶,空花瓶的个数 = 总的-插花的个数这肯定是一个单增的,所以利用二分求下界,这个位置,就是第一个空花瓶的位置,最后一个花瓶的位置需要特判一下,确定是第几个空花瓶,剩下的跟算第一个差不多。主要是很多细节要注意,写代码要各种严谨.... 1 #i. 阅读全文
posted @ 2013-07-27 11:33 Naix_x 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 果断对Tarjan不熟啊,Tarjan后缩点,求树上的最长路,注意重边的处理,借鉴宝哥的做法,开标记数组,标记自己的反向边。 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 200001 9 #define M 2000001 10 #define INF 0x3f3f3f3f 11 struct node 12 { 13... 阅读全文
posted @ 2013-07-27 09:24 Naix_x 阅读(250) 评论(0) 推荐(0) 编辑