倍增
wspl654321
。。。。。。
展开
-
疫情控制
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; const int M=51000; struct st{ ll rest,id; }; st a[M],b[M]; ll vis[M],used[M],de原创 2017-10-22 16:56:38 · 2183 阅读 · 0 评论 -
运输计划
这个题和疫情控制差不多,但那个题更恶心。 先二分答案,找需要减少的边,看他们有没有一条边是一样的 如果没有的话,肯定不行,如果有的话,看删掉最大的能不能让所有的路大于答案 树上的最短边就是到公共祖先的距离,这里用tarjan求得,也可以用倍增,不会的话看前面的博客 找一条边经过多少次用差分 把两个节点+一就代表这两个叉上的点都走过一遍,可是祖先上面的点没有走,所以把祖先-2,求树的后缀和就原创 2017-10-23 11:03:59 · 700 阅读 · 0 评论 -
[SCOI2016]萌萌哒
这个题的限制可以用并查集来做 最后的答案就是,因为每一个并查集是固定的,一个数有10种选择 所以答案就是9*10^(n-1) 然后并查集用倍增优化 对一个区间打标记 大区间在一个集合,小区间也在一个集合。 修改完将完全标记下放 查询有几个集合就行了 #include<cstdio> using namespace std; int f[21][121102],T,n,c...原创 2018-03-11 10:10:44 · 297 阅读 · 0 评论