数据结构
cnyali_szsh348
这个作者很懒,什么都没留下…
展开
-
高斯消元
高斯消元模板我们可以这样理解高斯消元:如:解一个三元方程:x1+2*x2-x3=62*x1+x2-3*x3=9-x1-x2+2*x3=7我们可以将其转化成矩阵的形式:1 2 -1 x1 -62 1 -3 * x2 = -9 -1 -1 2 x3 7既然x1,x2,x3是我们要求的未知数,不妨将它们先行舍去,同时将等式右...原创 2020-02-04 19:08:34 · 126 阅读 · 0 评论 -
Catlan数 2019.11.07
模板1模板2模板3代码#include <bits/stdc++.h>using namespace std;const int maxn=3000+10,MOD=1e9+7;long long a[maxn],n,ans,t;int main(){ a[0]=1;//初始化a[0]=1 scanf("%lld",&t); for(int i=1;i<...原创 2019-11-07 16:45:12 · 104 阅读 · 0 评论 -
luogu P1629 邮递员送信 题解
链接题目描述有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。输入格式第一行包括两个整数N和M。第2到第M+1行,每行三个数字U、V、W,表示从A到B有一条需要W时间的道路。 ...原创 2019-11-03 20:05:17 · 332 阅读 · 0 评论 -
2019-03-10 离散化
USACO 3.1.4cpp:#include <bits/stdc++.h>using namespace std;const int maxn=2001;struct lrj233{ int x1,x2,y1,y2,c;}sp[maxn];int p[maxn][maxn],ys[maxn],a,b,n,cntx,cnty,tx[maxn],ty[maxn],ta[...原创 2019-03-10 20:57:02 · 113 阅读 · 0 评论 -
2019-04-09 线段树
P3372 线段树1线段树模板(LAZY):#include <bits/stdc++.h>const int maxn=100000+10;using namespace std;long long c[maxn*4],sum,lazy[maxn*4];void init(int h,int s,int t){ int mid=(s+t)/2; if(s=...原创 2019-04-09 20:31:45 · 76 阅读 · 0 评论 -
2019-05-21 图进阶
割顶的定义:对于无向图G,如果删除某个点u之后,联通分量数量增加,则称u为图的割顶。DFS时标记每个点遍历的次序为dfn规定low(u)为u及其后代所能连回的最早祖先的dfn值如:该图中,A B C D Edfn 1 2 3 4 5low 1 2 3 3 3因为e有一条边可连回c(图上未标),所以c,d,e三点的low值都为c的dfn值——3求割顶代码:...原创 2019-05-21 20:15:31 · 82 阅读 · 0 评论 -
2019-06-11 LCA
LCA思路一:暴力算法(会T3个点),直接从需要搜索的点向上,并将路径记录下来,再进行对比即可。代码:#include<bits/stdc++.h>using namespace std;const int maxn=500000+5;vector<int>e[maxn];int d[maxn],f[maxn];void dfs(int x,int fa){...原创 2019-06-11 19:56:27 · 92 阅读 · 0 评论 -
树形DP入门2019-08-12
【题意】公司有n个人,每个人有价值vi,有一天举办年会,每个人都可以参加,但有严格的等级制度,参加活动时,不能同时出现a和a的上司,问如何才能使总和最大。【分析】每个人只有去和不去两种状态,设f[i][0]和f[i][1]分别表示第i个人不参加和参加年会,获得的总的最大价值。则状态转移方程为:f[i][1] += f[j][0],f[i][0] += max{f[j][0],f[j][...原创 2019-08-12 15:32:26 · 88 阅读 · 0 评论 -
最小生成树模板
#include <bits/stdc++.h>using namespace std;const int maxn=500001;int fa[maxn],n,m,ans,s;struct edge{ int x,y,z;}a[500001];bool cmp(edge x,edge y){ return x.z<y.z;}int find(int x...原创 2019-03-04 21:46:57 · 105 阅读 · 0 评论 -
2019-02-24 二维凸包
二维凸包:#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=100000+10;int n,top=2;double ans;struct node{//存储直角坐标系的x和y值 double x,y;};node p[maxn],z[maxn];bool cmp(node u,node v){//...原创 2019-02-24 20:30:55 · 139 阅读 · 0 评论 -
2019-02-13 最短路应用
传递闭包:传递闭包就是求有向图中两点的可达性。若从x可以到y,则ok[x][y]=1,否则ok[i][j]=0,然后利用近似Floyd的方法求解核心代码:for(int k=1;k&amp;amp;lt;=n;k++) for(int i=1;i&amp;amp;lt;=n;i++) for(int j=1;j&amp;amp;lt;=n;j++) ok[i][j]|=(ok[i][k]&amp;amp;amp;ok[k][原创 2019-02-13 14:52:57 · 224 阅读 · 0 评论 -
【题解】HDU 1285——确定比赛名次
确定比赛名次题目描述:有N个比赛队(1&amp;lt;=N&amp;lt;=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input 输入有若干组,每组中的第一行为二个数N(1&amp;lt;...原创 2018-10-02 21:04:20 · 274 阅读 · 0 评论 -
链表 2018-11-25
这节课复习数据结构。链表简单来说就是首为0,尾为空(NULL)。用链表可以进行简单的快速排序(题目)切记:用链表做会超时!!!(链表时间复杂度O(n方))#include <bits/stdc++.h>using namespace std;const int maxn=100000+10;int n,m,k;struct node{ int w,next;}a[m...原创 2018-11-25 21:25:36 · 89 阅读 · 0 评论 -
队列 2018-12-9
队列的特征是先进先出。一般用f(first)表示队首,用l(last)表示队尾,然后进行操作两种方法:1.STL法:#include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;using namespace std;queue &amp;amp;amp;lt;int&amp;amp;amp;gt; q;int n;int main(){ scanf(&amp;am原创 2018-12-09 19:34:57 · 107 阅读 · 0 评论 -
2018-12-16 栈
栈:老师blog十进制转二进制:1.数组模拟栈:#include &amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;const int maxn=1000+10;int s[maxn],n,len;int main(){ scanf(&amp;quot;%d&amp;quot;,&amp;amp;amp;n); while(n){ s[++l原创 2018-12-16 19:34:48 · 81 阅读 · 0 评论 -
spfa
#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=10000+10,inf=2147483647;int n,m,s,tot,dis[maxn],head[maxn];bool vis[maxn];struct Edge{ int next,to,w;}h[maxn];void add(int u,in...原创 2018-12-10 22:31:32 · 82 阅读 · 0 评论 -
2018-12-23 树
数组模拟堆进行快速排序:#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=100000+10;int a[maxn],len,n,k;int main(){ scanf("%d",&amp;n); for(int i=1;i&lt;=n;i++){ scanf("%d",&am原创 2018-12-23 20:01:12 · 105 阅读 · 0 评论 -
2018-12-30 树状数组
这一题代码:#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=500000+5;int c[maxn],n,m;int szsh(int x){ return x &amp; -x;}void add(int i,int x){ while(i&lt;=n){ c[i]+=...原创 2018-12-30 20:19:15 · 104 阅读 · 0 评论 -
Tarijan
牛的舞会#include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;using namespace std;const int N=10001,M=100010; int n,m,ans,head[N],pos,a,b;stack&amp;amp;amp;lt;int&amp;amp;amp;gt;S;struct edge{//结构体,存储编号与下一个 int to,next;原创 2019-02-15 14:59:26 · 130 阅读 · 0 评论 -
2019-2-12 最短路径算法
Dijkstra+Heap优化:可AC这道题还有这道题//时间复杂度:O(n*log2n)#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=1000000+10,inf=2147483647;int w[maxn],to[maxn],beg[maxn],nex[maxn],d[maxn],p[maxn];...原创 2019-02-12 15:03:43 · 194 阅读 · 0 评论 -
2018-10-02拓扑排序
拓扑排序:大学-高中阶段自由选课在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B ,则A为B的前序 。Tips:有向无环图才有拓扑排序。入度:有几条边与它相连一.邻接矩阵来做#in...原创 2018-10-02 19:58:25 · 147 阅读 · 0 评论