摘要: 例题:POJ 1716 - Integer Intervals 阅读全文
posted @ 2019-06-19 18:16 Hanasaki 阅读(130) 评论(0) 推荐(0)
摘要: 贪心 阅读全文
posted @ 2019-06-14 14:36 Hanasaki 阅读(211) 评论(0) 推荐(0)
摘要: 可持久化线段树是一类线段树的实现方式,用于保存线段树的历史版本。从而方便查询区间第k大值。 可持久化线段树可以看作一系列线段树的集合,这样的话就需要n^2的空间,显然无法接受。但是我们发现每次修改都只是改一条链,因此可以用动态开点的方式每次只新建一条链的节点,空间就是nlogn。 阅读全文
posted @ 2019-06-13 22:23 Hanasaki 阅读(108) 评论(0) 推荐(0)
摘要: 点修改 Update(x,v): 把Ax修改为v Query(L,R): 计算Min{AL,AL+1,...,AR} minv[o]表示节点o所对应的区间中所有元素的最小值 区间修改 Add(L, R, v): 把AL, AL+1, ..., AR的值全部增加v Query(L, R): 计算子序列 阅读全文
posted @ 2019-06-11 11:24 Hanasaki 阅读(128) 评论(0) 推荐(0)
摘要: 为什么要顺着失配边走?:每次沿失配边走都是当前状态的尽可能最大值 T:文本串 P:模式串 f[i]:P的前i长度子串中前后对称的最大长度(不含"全"(j > f[j])) 阅读全文
posted @ 2019-06-10 20:47 Hanasaki 阅读(121) 评论(0) 推荐(0)
摘要: 只有存在A到非A的环时才会说明题目矛盾 阅读全文
posted @ 2019-06-10 20:01 Hanasaki 阅读(91) 评论(0) 推荐(0)
摘要: //队列优化 O(VE)const int MAXN = 1e5+5; const int INF = 0x3f3f3f3f; struct Edge { int from,to,dist; Edge(int u,int v,int w):from(u),to(v),dist(w){ } }; struct SPFA { int n,m; vectoredg... 阅读全文
posted @ 2019-06-10 18:40 Hanasaki 阅读(227) 评论(0) 推荐(0)
摘要: //普通版本 O(n^2)int vis[n],d[n]; memset(vis,0,sizeof(vis)); for(int i=0;i edges; vector G[maxn]; bool done[maxn]; int d[maxn]; int p[maxn]; void init(int n){ this->n=n; ... 阅读全文
posted @ 2019-06-10 18:38 Hanasaki 阅读(94) 评论(0) 推荐(0)
摘要: //黑白二着色-bicoloring(判断是否为二分图)int color[maxn]; bool bipartite(int u){ for(int i = 0; i < g[u].size(); i++){ int v = g[u][i]; if(color[u] == color[v]) return false; if(!color... 阅读全文
posted @ 2019-06-10 18:31 Hanasaki 阅读(156) 评论(0) 推荐(0)
摘要: int c[maxn]; int topo[maxn]; bool dfs(int u) { c[u] = -1; for(int v = 0; v < n; v++) if(G[u][v]) { if(c[v] < 0) return false; else if(!c[v]&&!dfs(v)) return false; } c... 阅读全文
posted @ 2019-06-10 18:25 Hanasaki 阅读(109) 评论(0) 推荐(0)