- 博客(191)
- 问答 (2)
- 收藏
- 关注
原创 【算法小结】tarjan——强连通分量的分解算法
pre文章:tarjan算法模板:配套习题:求强连通分量的个数代码:#include<bits/stdc++.h>using namespace std;const int N = 10005;vector<int> G[N];//邻接表stack<int> s;int n, m, dfn[N], ins[N], low[N], color[N], num[N], colornum, id;//结点个数,边的个数,时间戳,是否在.
2022-05-24 16:25:34
119
原创 【算法小结】树的重心
图片来源:树的重心笔记求树的重心有两种方法:1.根据最大连通块最小的性质求2.根据到达重心的距离之和最小的性质求(树状DP)配套题目:会议1.方法一:#include<bits/stdc++.h>using namespace std;const int N = 50005;int n, ans, sub; //结点数 树的重心 去掉某点后最大连通块的节点数int minsub = 0x3f3f3f3f; //记录最大连通块的最小值int sz[N].
2022-05-13 20:46:39
865
原创 【算法模板】树的直径
一般解法是两次搜索,第一次求离根节点最远的点A,第二次求里点A最远的点B。A与B之间的距离就是树的直径。#include<bits/stdc++.h>#define N 100005using namespace std;int n,d[N]={-1},deepest;vector<int> edges[N]; // vector存图void add(int u,int v) { edges[u].push_back(v); } // 简单加边void dfs(
2022-04-30 21:28:17
180
原创 【算法小结】带边权的最大割
“ Ctrl AC!一起 AC!”若不带边权,将边权设为1即可。步骤:枚举每个点所在集合情况,计算最大值即可。· 任取一点加入集合S中,其他的都在集合T中,然后计算此时的割,由此步开始枚举· 进入dfs进行枚举,每次枚举后计算割,并更新最大割代码:配套题目#include<iostream>using namespace std;int mp[25][25];bool inS[25];int n, maxlink;void dfs(int flowv,
2022-04-30 13:54:20
308
原创 Johnson 全源最短路
“ Ctrl AC!一起 AC!”步骤:· 对于原图,新增一个结点s,使该点与所有点之间建立一条边,权重为零。· 对新图使用bellman或spfa求得新点s到其他点的最短距离,h[0]....h[V-1]· 对原图进行边权更新,w`(u,v)=w(u,v)+(h[u]-h[v])· 移除新的顶点s,以每个顶点为起点求出最短路代码:配套题目:Johnson#include <cstring>#include <iostream>#include
2022-04-29 14:57:01
327
原创 【算法模板】拓扑排序
可以使用邻接矩阵或邻接表步骤: 初始时,先第一遍扫描入度为零的点,存入队列中 以该点为父点,通过邻接矩阵遍历他的所有子点 子点的入度减一,并对该点进行处理(如求最长路,可以通过父点更新他到起点的长度,或如求从起点到该点的路数,即可以累加上父点的路数) 当子点的入度为零时,将他加入到队列中 循环直到队列为空 模板题1:P4017 最大食物链计数#include<bits/stdc++.h>using namespace std;con
2022-04-25 22:04:25
175
原创 洛谷 P3385 【模板】负环
“ Ctrl AC!一起 AC!”链式前向星似乎比vector邻接表好用 qwq题目:P3385 【模板】负环思路:SPFA模板,然后用链式前向星邻接表代码:#include<iostream>#include<queue>#include<cstring>using namespace std;const int MAXN = 2010;const int MAXM = 3010;const int INF = 0x3f3f3f3f;
2022-04-25 15:20:01
194
原创 【算法模板】pair版堆优化·链式前向星·Dijkstra
“ Ctrl AC!一起 AC!”对不起,本蒟蒻只会背模板...qwqdijkstra一般用来解决单源最短路径问题,可以通过堆优化省去第二层找最近的那个点的循环。pair版堆优化开始用队列存储起点,然后利用优先队列对dis自动排序的功能,取出队头即为所要的最近点typedef pair<int, int> PII; //first->distance; second->u;priority_queue<PII, vector<PII>,
2022-04-23 22:58:46
1630
原创 LeetCode 429. N叉树的层序遍历
“ Ctrl AC!一起 AC!”题目:原题思路:树的广度优先搜索代码:/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children
2022-04-08 10:29:12
1000
原创 LeetCode 15.三数之和
题目:原题思路:先排序,枚举第一维,然后用双指针。如果大于目标值,右指针减如果小于目标值,左指针加class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(),nums.end()); int n=nums.size(); vector<vector<i
2022-04-07 19:33:49
302
原创 AcWing 1049 大盗阿福
原题普通方法:状态机方法:f[i][0]:未选第i家的f[i][1]:选了第i家的#include<bits/stdc++.h>using namespace std;using namespace std;const int N=100005,INF=0x3f3f3f3f;int n;int w[N],f[N][2];int main(){ int T;cin>>T; while(T--){ in..
2022-04-05 22:50:35
468
原创 线段树笔记
线段树学习笔记参考基本概念线段树的每个节点维护一个区间[i, j]的信息。如果一个节点维护着区间[i, j]的信息,且i != j,那么其左孩子维护着区间[i, (i+j)/2]的信息,右孩子维护着区间[(i+j)/2+1, j]的信息。线段树中,如果一个节点的编号为x,那么左孩子的编号为2x,右孩子的编号为2x+1。数组长度通常开最大长度的4倍建树每颗树的叶结点都是数组中的一个值,由叶结点自底向上推出父节点,注意这里的树也就是个扩大四倍的数组例:建一个线段区间最小值树//线段树数组:
2022-04-04 20:53:07
375
原创 【算法小结】大整数快速幂
“ Ctrl AC!一起 AC!”前置文章:【算法小结】快速幂基于普通版快速幂,大整数快速幂的数值范围要大于long long 类型,所以我们在处理指数时,要分段处理:例如:将指数123分解成3+10*2+100*1,所以关键点就是不断以十次幂扩大底数然后对右式分析:其中a^3,a^10,(a^10) ^2,....都可以通过普通版的快速幂实现#include<bits/stdc++.h>using namespace std;typedef long lo
2022-04-03 23:12:58
404
原创 【算法小结】尺取法及例题(Subsequence,Jessica’s Reading Problem)
“ Ctrl AC!一起 AC!”反复地推进区间的开头和末尾,来求取满足条件的最小区间的方法被称为尺取法目录例1:Subsequence解法1:解法2(尺取法):例2:Jessica's Reading Problem解(尺取法):例1:Subsequence解法1:用sum[i]表示区间[0,i)的整数和,那么sum[t]-sum[s]就是区间[s,t)的整数和a(0)+...+a(i-1)=sum[i]a(s)+...+a(t-1)=.
2022-04-02 23:24:47
687
原创 POJ 4978:宠物小精灵之收服
“ Ctrl AC!一起 AC!”题目:http://noi.openjudge.cn/ch0206/4978/思路:二维01背包,抓的话球和体力同时减掉,否则都不减代码:#include <iostream>#include <algorithm>int num[101];int wei[101];int dp[1001][501];using namespace std;int main(){ int n, m, k; cin
2022-04-01 23:31:53
434
原创 最长公共/上升/公共上升子序列
目录最长上升子序列:最长公共子序列:最长公共上升子序列:“ Ctrl AC!一起 AC!”最长上升子序列:设序列为s,则dp[i] 表示以s[i]结尾的序列中的最长上升子序列的长度状态方程:dp[i]=max(dp[j]+1) (其中j<i,并且s[j]<s[i])核心代码(s下标从零开始):for(int i=0;i<len;i++){ for(int j=0;j<i;j++){ if(s[j]<s[i]) dp[i+1]=ma
2022-03-31 23:05:01
297
原创 LeetCode 3. 无重复字符的最长子串
“ Ctrl AC!一起 AC!”原题:题目分析:滑动窗口,r在右边一直走,l为r前面的与r处字符相同的位置的下一个位置,如果前面没有相同的,l就为0代码:class Solution {public: int lengthOfLongestSubstring(string s) { if(s=="") return 0; int len=s.size(); int ans=1; int l=0;
2022-03-30 18:05:36
736
原创 【数据结构】穿线二叉树
“ Ctrl AC!一起 AC!”定义:存储结构:typedef char datatype;typedef struct node{ datatype data; int ltag,rtag; struct node *lchild,*rchild;}binthrnode;typedef binthrnode* binthrtree; 创建中序穿线二叉树:先建立一颗一般的二叉树,然后对其进行中序线索化。binthrtree pre=NULL;binthr.
2022-03-29 19:38:30
2291
原创 POJ 3723 Conscription(最大权森林问题)
“ Ctrl AC!一起 AC!”题目:分析:将每个人看成点,关系看成边,我们将其构成的森林取最大的无环的边就是答案若将边权取反,就相当于求最小生成树代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+9;const int mod=1e8+7;int father[50005];int n,m,r;struct node{ int u,v,cost;}edge.
2022-03-28 18:55:53
433
原创 POJ 3255 Roadblocks
“ Ctrl AC!一起AC!”题目:思路:用Dijkstra,但是我们每次不仅仅更新最短距离,我们还要更新次短距离。代码:#include<bits/stdc++.h>#define inf 0x3f3f3f3f#define LL long longusing namespace std;typedef pair<int,int> P;const int MAX=1e9+7;const int MAXN=1e6+10;int n,r;s.
2022-03-27 19:41:08
453
原创 POJ 1182:食物链
“ Ctrl AC!一起 AC!”题目:忘题戳这分析:一只动物(x)可以成为A,B,C三种情况,假设一共有n只动物,我们设该动物x时为A类动物,x+n时为B类动物,x+2*n时为C类动物。我们规定属于同一集合的动物不矛盾,不同集合的动物之间没有关系。如果x,y是同一类动物,那么最终x,y将在同一个集合,x+n,y+n将在另一个集合,x+2*n,y+2*n将在另一个集合。如果x吃y,那么x,y不能在同一个集合,因为此时它们都是A类动物,x,y+n才是在一个集合的,因为此时x是A类动物,y是B类动物
2022-03-26 18:54:23
205
原创 【C站水库】带头结点的单链表的操作
题目:代码:#include<bits/stdc++.h>#define ph print(head)using namespace std;struct node{ int val; node* next;};node* create(){ node *head,*tail,*temp; head=new node; head->next=NULL; tail=head; printf("请输入一串链表(以-1结尾):\n"); while(1){
2022-03-25 19:53:30
1141
原创 【算法小结】多重集组合数---DP
“ Ctrl AC!一起 AC!”问题:有n种物品,第i种物品有x[i]个。不同种类的物品可以互相区分但相同种类的物品不可区分。从这些物品中取出m个的话,有多少种取法?求出方案数模M的余数。分析:设dp[i][j]表示从i种物品中取出j件的方案数。如果要从i种物品中取出j件,我们可以先从i-1中物品中取出j-k件,再从第i中物品中取出k件。复杂度为O(nm^2),可继续优化。· j<=x[i]时展开式子可得:dp[i][j] = dp[i-1][j] + dp[i-
2022-03-24 18:24:06
661
原创 【算法小结】划分数---计数DP
“ Ctrl AC!一起 AC!”问题:有n个无区别的物品,将它们划分成不超过m组,求出划分方法数模M的余数。定义dp[i][j]表示将j个物品划分成i组的总方案数。· 若这i组里每个组的总数量大于零,那么 若每组的数量都减去1,那么j就变成了j-i· 若这i组里面存在一个总数量等于零的组,那么这个组可有可无递推公式:dp[i][j]=dp[i][j-i]+dp[i-1][j]代码实现:int n,m;int dp[MAXN][MAXN];void so
2022-03-23 19:44:15
243
原创 【算法小结】多重部分和问题
“ Ctrl AC!一起 AC!”目录多重部分和问题:解法一:解法二:多重部分和问题:有n种不同大小的数字a_i,每种各m_i个。判断是否可以从这些数字之中选出若干使它们的和恰好为K。解法一:定义dp[i][j],表示用前i种数字是否能加成j。要让前i种数字加和成j,那么就要让前i-1种数字加和成j,j-a_i ... j-m_i*a_i 中的某一种。#include<bits/stdc++.h>using namespace std;c
2022-03-22 20:21:36
352
原创 【C站水库】无头结点的单链表操作
【C站水库】------- 博主的灌水区(🤫嘘,别被审核发现了)今天写了一道题:代码:#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;struct node{ int val; node* next;};void printLink(node* head){ printf("现在的单链表是:\n"); while(head){ pri.
2022-03-21 17:45:16
1483
原创 【数据结构】二叉树的其他运算
“ Ctrl AC!一起 AC!”目录二叉树的查找算法:统计二叉树中结点的个数:判断两个二叉树是否相等:求二叉树的高度:二叉树的查找算法:bintree locate(bintree t,datatype x){ bintree p; if(t==NULL) return NULL; else { if(t->data==x) return t; else{ p=locate(t->lchild,x); if(p) return p
2022-03-20 18:08:36
1020
原创 【算法小结】树状数组及其应用
“ Ctrl AC!一起 AC!”目录根据原数组求树状数组:通过树状数组求前缀和:更新树状数组以更新原数组:实例:根据原数组求树状数组:首先树状数组的下标的是从1开始!通过树状数组求前缀和:int getSum(int x){ int sum=0; for(int i=x;i>0;i-=lowbit(i)){ sum+=c[i]; } return sum;}更新树状数组以更新原数组:void updat...
2022-03-19 17:39:22
203
原创 【数据结构】二叉树遍历的非递归实现
“ Ctrl AC!一起 AC!”目录二叉树结点数据结构:定义一个顺序栈及其操作:前序遍历的非递归实现:中序遍历的非递归实现:后序遍历的非递归实现:非递归主要依靠用一个栈记录回溯点,进行回溯。二叉树结点数据结构:typedef char datatype;typedef struct node{ datatype data; struct node *lchild,*rchild;}bintnode;typedef bintnode *bintree;b
2022-03-18 17:25:20
1187
原创 【数据结构】二叉树遍历的递归实现
“ Ctrl AC!一起 AC!”目录数据结构定义:前序遍历二叉树递归算法:中序遍历二叉树递归算法:后序遍历二叉树递归算法:根据前序遍历以及附带信息建立二叉树:数据结构定义:typedef char datatype;typedef struct node{ datatype data; struct node *lchild,*rchild;}bintnode;typedef bintnode *bintree;bintree root; 前序遍历二叉
2022-03-17 18:51:45
1131
原创 【数据结构】二叉树的顺序存储与链式存储
“ Ctrl AC!一起 AC!”1.完全二叉树的顺序存储:一个数组即可解决,i/2向下取整为其父结点,2*i,2*i+1为其左右孩子。#define MAXSIZE 20typedef char datatype;datatype tree[MAXSIZE];int n; //树中实际所含结点 2.一般二叉树的顺序存储:#define MAXSIZE 20typedef char datatype;typedef struct{ datatype data; int
2022-03-16 13:53:20
1528
原创 【数据结构】树的线性表示
“ Ctrl AC!一起 AC!”目录1.树的括号表示:特点:将括号表示法转化成孩子表示法:代码实现:2.树的层号表示:概述:将层号表示转换成树的孩子表示(扩充版):1.树的括号表示:特点:"("前面的一定是某颗树的根节点 “( )”之间的结点是上述根节点的子结点将括号表示法转化成孩子表示法:代码实现:#define m 3 //自定义树的度数,决定孩子表示法的结点的孩子最大个数 #define MAXSIZE 20 //树的孩...
2022-03-15 21:14:20
1409
原创 【数据结构】树的遍历
“ Ctrl AC!一起 AC!”目录树有三种表示方法:树的遍历有三种:结点结构:树的前序遍历递归版:树的后序遍历递归版:按前序遍历顺序建立一颗树:树的层次遍历:树有三种表示方法:双亲表示法,孩子表示法和兄弟表示法。这里我们使用指针式的孩子表示法。树的遍历有三种:前序遍历,后序遍历,层序遍历(二叉树还有中序遍历)结点结构:#define m 3 //m指树的度typedef char datatype;typedef struct nod
2022-03-14 21:28:00
1992
原创 【数据结构】稀疏矩阵的链式存储(十字链表)
“ Ctrl AC!一起 AC!”目录稀疏矩阵的十字链表表示:十字链表中结点的结构:创建稀疏矩阵的十字链表表示:稀疏矩阵十字链表的查找:稀疏矩阵的十字链表表示:每一行的非零元素构成一个带表头的环形链表 每一列的非零元素构成一个带表头的环形链表 第i行和第i列的表头是同一个 所有表头结点构成一个新的带表头的环形链表因此:十字链表的表示中有非零元素结点和表头结点两类结点其中表头结点的row,col均为零,表头结点构成的环形链表的表头的row和col分.
2022-03-13 17:57:13
14707
原创 浮点数二分模板(附实例)
“ Ctrl AC!一起 AC!”目录模板:题目:~~~广告:整数二分详见:整数二分模板(附实例)浮点数二分是一种不精确的二分,因为受浮点数小数位数限制,我们只能根据题目意思,求个大概的值。模板:double binary_search(double l,double r){ const double eps=1e-6; //eps表示精度,根据题目确定 while(r-l>eps){ //精度不足,则继续二分 double mid=(l+r)/2 /
2022-03-11 22:06:48
489
原创 【数据结构】字符串之链式串
“ Ctrl AC!一起 AC!”目录结点的定义:创建字符串:插入:删除:连接:截取子串操作:字符串的链式存储称为链式串结点的定义:typedef struct node{ char data; struct node *next;}linkstrnode;typedef linkstrnode *linkstring;创建字符串:void strcreate(linkstring *S){ char ch; linkstrnode
2022-03-11 12:39:33
1633
原创 【数据结构】字符串之顺序串
“ Ctrl AC!一起 AC!”目录结构描述:插入操作:删除操作:连接操作:求子串操作:字符串的顺序存储称为顺序串。结构描述:#define MAXSIZE 100typedef struct{ char str[MAXSIZE]; int length;}seqstring;插入操作:void strinsert(seqstring *S,int i,seqstring T){ //将T插入到S从i开始的地方 int k; if(i&l
2022-03-10 19:09:41
488
原创 【数据结构】链式队列
“ Ctrl AC!一起 AC!”目录链式队列结构:建立一个空的链式队列:判断链式队列是否为空:输出链式队列中各个结点的值:取得链式队列的队首结点值:链式队列的插入操作:链式队列的删除操作:队列的链式存储称为链式队列。链式队列的队首和队尾指针分别用front和rear表示。链式队列结构:typedef int datatype;typedef struct link_node{ datatype info; struct link_node *next
2022-03-09 14:06:35
1218
空空如也
这是结构体的什么用法。
2022-01-27
vs输出内容位置的相关问题
2021-11-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅