上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 53 下一页
摘要: 树链剖分+二分+线段树套treap 写题5分钟,调试2小时。。。 很好理解,就是维护树链剖分的线段树改成线段树套treap,然后每次树套树删除一个数,插入一个数,二分一个数查找排名就行了 #include<bits/stdc++.h> using namespace std; const int N 阅读全文
posted @ 2017-08-06 15:28 19992147 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 带修改莫队 抄了个板子,跟莫队很像 莫队是两维排序,带修改的莫队是三维排序,(block[l],block[r],time) 我们把询问按照这个顺序排序,然后像普通莫队一样转移,唯一不同的是块要开到sqrt(n),还有转移区间之前要把对应区间的修改修改好,用一个cur指针指向当前修改,如果这个修改在 阅读全文
posted @ 2017-08-06 15:25 19992147 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 并查集+dfs 先开始想和不相连的点用并查集连起来,最后看每个连通块有多少个点就行了,但是这样是O(n*n)的,然而我并没有想到补图 其实就是求补图有多少连通块,因为补图中两个点有边,那么这两个点必须在一栋大楼里,因为他们之间没有联系,然后这样就有了许多连通块,不同的连通块可以不相连,因为不同的连通 阅读全文
posted @ 2017-08-06 12:42 19992147 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 线段树分治+并查集 跟1018很像,但是这里是带权并查集,修改时要注意,因为可回溯并查集不能路径压缩,所以也不能对保存到根路径长度的数组修改,每次连接,我们只对根的距离数组修改,这样不会影响操作结果,因为路径压缩就是把我们要求的d数组在find时把整个路径上的d数组都顺便修改了,这里我们用到哪个就求 阅读全文
posted @ 2017-08-04 11:15 19992147 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 并查集+最小生成树 首先我们发现这题可以lct维护最小生成树,但是发现如果生成树在之后是不会修改的,那么就想到了并查集,然后就不知道怎么做了。。。 其实当我们连接两个连通块的时候,两个连通块只能通过这一条边联通,所以这条边的两个端点是谁并不重要,因为两个连通块之间的通道最小值不会受到位置的影响。那么 阅读全文
posted @ 2017-08-03 19:29 19992147 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 线段树分治+并查集 线段树本身就是分治结构,碰见这种带删除修改的题目是再合适不过的,我们对于每段修改区间在线段树上打标记,每次路过就进行修改,叶子结点表及答案,先把所有修改在线段树上标记,然后dfs就行了 但是并查集怎么恢复呢?我们只要维护一个栈,保存某次操作之前这两个点的信息,dfs本身就是利用栈 阅读全文
posted @ 2017-08-03 19:05 19992147 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 线段树合并+离线+启发式合并 半年前这道题t成狗。。。 离线的做法比较好想,按照边的权值排序,询问的权值排序,然后枚举询问不断加边,加到上限后查找第k大值,这里平衡树,权值线段树都可以实现。 那么我们用权值线段树就行了, 并查集维护两点连通性,不连通的话就合并,并查集连接。 #include<bit 阅读全文
posted @ 2017-08-02 21:21 19992147 阅读(164) 评论(0) 推荐(0) 编辑
摘要: A:读懂题,乘一下判断大小就行了 #include<bits/stdc++.h> using namespace std; int main() { int s, v1, v2, t1, t2; scanf("%d%d%d%d%d", &s, &v1, &v2, &t1, &t2); int ans 阅读全文
posted @ 2017-08-02 21:10 19992147 阅读(145) 评论(0) 推荐(0) 编辑
摘要: A: 如果n%2=0或2就是undefined,否则判一下转一下是否能到达状态 #include<bits/stdc++.h> using namespace std; int n; char s[10], t[10]; int main() { scanf("%s%s%d", s, t, &n); 阅读全文
posted @ 2017-08-01 19:28 19992147 阅读(138) 评论(0) 推荐(0) 编辑
摘要: floyde+bitset 可以用tarjan+递推,复杂度n+m 但是我们也可以用传递闭包+bitset,复杂度n^3/32 就是通常floyde是k=1->n i=1->n j=1->n f[i][j] |= f[i][k] * f[k][j]但是我们发现floyde的两维数组可以用bitset 阅读全文
posted @ 2017-07-30 18:50 19992147 阅读(161) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 53 下一页