模板
杨小猪猪
这个作者很懒,什么都没留下…
展开
-
STL慢慢整合
String string s; s.substr(i); 从下标i开始到结尾的子串 s.substr(i,k); 从下标i开始长度为k的字串原创 2021-11-16 19:54:19 · 53 阅读 · 0 评论 -
单调队列优化DP
题目要求:一般和dp一样,不过用普通dp会T,其中dp有一维可以用单调队列优化 可以用单调队列优化的数值会出现明显的上位替代,比如:最近的最大值,最近的最大总和,耀骑士(不是)。 例子:1.输入一个长度为n的整数序列,从中找出一段长度不超过m的连续子序列,使得子序列中所有数的和最大。 原本暴力复杂度O(nm),但是由前缀和s[i]-s[j]发现,在i固定的情况下,s[j]越小越好,并且离i越近越好,这样就出现了上位替代。可以用单调队列优化。 2.农场有编号连续的n头奶牛,每头奶牛i有一个效率...原创 2021-10-30 21:33:34 · 128 阅读 · 0 评论 -
二分答案法
bool check(){} int l=0,r=n; while(l<r){ int mid=(l+r)/2; if(check(mid))r=mid; else l=mid+1; }原创 2021-10-30 19:15:31 · 75 阅读 · 0 评论 -
数位DP模板
#include<bits/stdc++.h> using namespace std; const int N = 35; int K, B; int f[N][N]; void init() {//求组合数 //模板:数位DP一般要预处理符合题意的组合数 for (int i = 0; i <= N; i++) { for (int j = 0; j <= i; j++) { if (!j)f[i][j] = 1; .原创 2021-10-20 16:20:07 · 82 阅读 · 0 评论 -
AcWing 1073. 树的中心
题目链接 题解 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; vector<int>E[N],w[N]; int up[N],jing[N],d1[N],d2[N]; int dfs_down(int x,int fa){ d1[x]=d2[x]=-0x3f3f3f3f; int dist=0; for(int i=0;i<(int)E[x].size();i++原创 2021-10-18 17:13:59 · 70 阅读 · 0 评论 -
AcWing 1072. 树的最长路径
题目链接 题意:求数的最长路径 #include<bits/stdc++.h> using namespace std; const int N=20010; int h[N],w[N],e[N],ne[N],idx=0,ans=0; void add(int a,int b,int c){ e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++; } int dfs(int u,int father){ int d1=0,d2=0,dist=0原创 2021-10-13 17:44:05 · 44 阅读 · 0 评论 -
dijkstra(朴素版+堆优化版)
原理: 1.每次从未标记的节点中选择距离出发最近的节点,标记,收录到最优路径的集合中 2.计算刚加入节点a的邻近节点b的距离,并根据条件更新节点b的距离 dijkstra堆优化版 #include<bits/stdc++.h> using namespace std; const int N = 3000, M = 20000; typedef pair<int, int> PII; int h[N], w[M], e[M], ne[M], idx; bool st.原创 2021-10-05 20:39:59 · 106 阅读 · 0 评论 -
邻接表(图论,模板)
#include<bits/stdc++.h> using namespace std; const int N = 2510, M = 6200 * 2 + 10; int h[N], e[M], w[M], ne[M], idx; void add(int a, int b, int c)//添加边的操作 { e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++; } //e存终点,w存权值,ne存相同出发点(a)的上一条边的号码.原创 2021-10-05 19:03:29 · 110 阅读 · 0 评论