首页 > TAG信息列表 > 500005
HDU5593 ZYB's Tree
求 \(n\) 个点的树上对于每个点距离小于 \(k\) 的点的数量(边权均为 \(1\) )。 \(n\leq 5\times 10^5,k\leq 10\) 。 设 \(f[u][i]\) 表示距离 \(u\) 点 \(i\) 距离以内并且在子树内的点,那么在 \(DFS\) 时可以用 \(O(nk)\) 的时间处理 \(f[u][i]=\sum f[v][i-1]\) ,其中 \(v\) 是 \(uP3426 [POI2005]SZA-Template
对于字符串刻印章,使每个字符都能被印出来,并且不能印上其他字符。求印章最短长度。 \(|S|\leq 5\times 10^5\)。 看到题目第一感觉是KMP,但具体实现很费脑筋。 先举个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 s[i] a b a b b a b a b b a b a nxt[i] 0 0 1 2 0 1 2 3 4 5 6 7「AHOI2022」钥匙
想搞成一个好维护的形式,这个 \(5\) 把钥匙要用起来。 那首先考虑一点实现的问题,我们对同一种颜色建出虚树,然后以每个钥匙为根遍历一遍整棵树考虑造一点信息。 先看到 A 性质,猜测我们要通过一些特殊的匹配方式变成一条路径如果被包含则答案加一。 ※ 那么考虑用栈储存钥匙,每次用栈洛谷P3368 【模板】树状数组 2
树状数组加差分的应用。(线段树也可以这么用) 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m; 4 long long t[500005]; 5 int lowbit(int x) {return x&(-x);} 6 7 void add(int x,long long k){ 8 while(x<=n){ 9 t[x]+=k; 10 x+=l牛客挑战赛57C树上行走
牛客挑战赛57C树上行走 传送门 题目大意 给一棵\({n}\)个点的树,每个点都有一个初始的权值\({a_i}\),有一个计数器\({b_i}\),初始值为\({0}\),现有两种操作:\({1、}\)给定\({x,y}\),令\({x\rarr y}\)的最短路上的点构成的序列为\({p}\),\({\forall i>1}\),\({b_{p_i}}\)增加\({a_{p_{i-1}P1966 火柴排队
P1966 火柴排队 树状数组的简单练习题目 题目要求最小化 \(\sum(a_i-b_i)^2\) 可以转化成 a数组中第K大的数要和b数组中第K大的数在同一个位置,所以先做一手离散化 然后令\(pos[brr[i]] = i\) pos数组中存储的是 b数组值所对应的位置 \(new[i] = pos[arr[i]]\) new数组中存储的是 aSWUST OJ492: 荷兰国旗问题
题目描述 荷兰国旗的问题是重新排列一系列字符R,W和B(红色,白色和蓝色是荷兰国旗的颜色),以便所有R首先出现,W紧随其后,B最后。针对此问题设计线性且稳定的算法。 输入 two lines, the first line is total of numbers characters R,W and B ,and the numbers less than 500005 the seP5960 【模板】差分约束算法
题面 给出m个不等式,每个不等式包含两个未知数和一个常数,求一组解或判定无解. 观察式子\(x_i-x_j \le c_k\) 不知道为什么就能观察出来它像最短路里的松弛操作. 所以建图,类比式子 \(dis_i \le dis_j + w_k\) ,容易发现最终解即为dis,有负环则无解(不知道原因. #include<iostreamCF985E Pencils and Boxes
Lisa 尺取法搞一波 然后前缀和优化一波 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int a[500005]; bool f[500005]; int n,k,d; int sum[500005]; int main(){ // ios::sync_with_std[ZJOI2013]丽洁体
题目分析 首先分析一下题目,就是给定一个由单词组成的序列,然后,在给出三个字符串序列,要求如何组成 \(A...B...C\)的形式 先注意输入,如果采用不当的方法,就算下面的算法是正确的,也会超时,可以用 \(getchar\),再处理换行 然后,针对一个贪心的想法,找到\(A\)的最位置,然后依次寻找\(B,C\),这样【模板】SPFA
指路洛谷 #include<iostream> #include<sstream> #include<cstring> #include<cstdio> #include<queue> using namespace std; const long long INF=2147483647; int s,N,n,last[500005],dis[500005],vis[500005]; struct node{ int to,val,neP4397 【[JLOI2014]聪明的燕姿】
先讲一些东西 1.算数基本定理:任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积N=P₁^a₁ P₂a₂…Pnan,这里P₁<P₂<…<Pn均为质数,其诸指数ai是正整数。 2.约数和定理:对于任意一个大于1的正整数N可以分解正整数:N=P₁^a₁ P₂a₂…Pnan,则由约数个数定理可知N的正约数有(a₁+[P5357] 【模板】AC自动机(二次加强版)
#include <bits/stdc++.h> using namespace std; struct ACA { queue <int> q; int c[500005][26],val[500005],pos[500005],fi[500005],cnt,ans[500005]; vector <int> g[500005]; void init() { memset(c,0,sizeof c); mdsu on tree 学习笔记
dsu on tree,树上启发式合并,和dsu并查集没有什么太大关系。是一种用于解决一类树上无修改可离线子树信息统计询问问题的技巧,优点是常数较小,代码复杂度低,实现较快。 思考一下有根子树信息统计类问题,我们想到的最暴力的想法就是dfs,但是当数据范围达到$10^5$量级时,dfs的时间复杂度显然Secret Message 秘密信息
https://loj.ac/problem/10054 题目描述 给出N个字符串,再给出M个字符串,对于M个中每一字符串求出N个中满足是它的前缀或它是这个前缀的数目的总和。 思路 显然,我们需要解决多个字符串前缀的问题,可以选择字典树维护。首先建出N个字符串的字典树,不过这里有两种情况,前缀和非前分块算法
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>using namespace std; using LL = long long;LL getint();int N, M;LL block, val[500005], blg[500005], tag[1005];void add(int l, int2019 Multi-University Training Contest 7
Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 A + B = C 10.52%(302/2872) 1002 Bracket Sequences on Tree 11.27%(16/142) 1003 Cuber Occurrence 6.67%(1/15) 1004 Data Structure Problem 23.08%(3/13) 1005 Equation 0.00%(0/63) 已补 1006 F逆序对
P1908 逆序对 做法早就忘了,今回忆一波 #include<bits/stdc++.h>using namespace std;long long n,a[500005],b[500005],ans;void merge(int l,int r)//分解整个数组{ if(l==r)return;//分解得只有1个元素就收手 int mid=(l+r)/2; merge(l,mid); merge(mid+1,r); in相似字串:后缀数组(wzz模板理解),单调栈
因为涉及到对模板的理解,所以就着代码看会好一些。 让那些坚决不颓代码的人受委屈了。 我是对着wzz的板子默写的,可能不完全一样啊。 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正。 可以有选择的浏览,单调栈的那个非模板部分可以不看,自己想。 因为写的稍微有点详细所以在网页CodeForces 314 D Sereja and Straight Lines
传送门 题意 再平面内有\(n\)个点,两个夹角为\(90\)°并与\(x\)轴夹角为\(45\)°的直线,求所有点与直线中的点的曼哈顿距离中的最大值最小。 思路 既然提到了最大值最小,那么必然是二分无疑了,又因为直线与坐标轴夹角为\(45\)°,所以曼哈顿距离就为点到直线距离的\(\sqrt{2}\)倍。我们