蓝桥杯大纲

大学C组

枚举 【1-3】

排序

  1. 冒泡排序【2】

  2. 选择排序【3】

  3. 插入排序【3】

搜索 【1-5】

BFS

模板:

queue<int> q;
st[1]=true; //点1已经被遍历
q.push(1);

while(q.size()){
    
    int t=q.front();
    q.pop();
    
	for(int i=h[t];i!=-1;i=ne[i]){
        int j=e[i];
        if(!st[j]){
            q.push(j);
            st[j]=true; //表示点j已经被遍历
        }
    }
}

#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
const int N=100010;
int n,m,l[N];
int h[N],e[N],ne[N],idx;
bool st[N];

void add(int a,int b){
	e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}

int bfs(){
	
	queue<int>q;
	q.push(1);
	st[1]=1;
	
	while(q.size()){
		int t=q.front();
		q.pop();
		for(int i=h[t];i!=-1;i=ne[i]){
			int j=e[i];
			if(st[j]==0){
				q.push(j);
				l[j]=l[t]+1;
				st[j]=1;
			}
		}
	}
	return l[n];
}

int main(){
	memset(h,-1,sizeof h);
	cin>>n>>m;
	while(m--)
	{
		int a,b;
		cin>>a>>b;
		add(a,b);
	}
	cout<<bfs();
	return 0;
}
/*
4 5
1 2
2 3
3 4
1 3
1 4
*/

DFS

模板:

int dfs(int u) {
	st[u]=1; //表示结点u已经被遍历过
	for(int i=h[u]; i!=-1; i=ne[i]) {
		int j=e[i];
		if(!st[j])
			dfs(j);
	}
}

#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
const int N=100010;
int n,ans=N;//ans表示答案
int h[N],e[N],ne[N],idx;
bool st[N];

void add(int a,int b) {
	e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}

int dfs(int u) {
	st[u]=1;//表示结点u已经被遍历过
	int sum=1,res=0;//sum表示当前子树的结点个数,res表示删除结点u后每个子树最大的结点个数
	for(int i=h[u]; i!=-1; i=ne[i]) {
		int j=e[i];
		if(!st[j]) {
			int s=dfs(j);
			res=max(res,s);
			sum+=s;
		}
	}
	res=max(res,n-sum);
	ans=min(ans,res);
	return sum;
}

int main() {
	memset(h,-1,sizeof h);
	cin>>n;
	for(int i=1; i<n; i++) {
		int a,b;
		cin>>a>>b;
		add(a,b);
		add(b,a);
	}
	dfs(1);
	cout<<ans;
	return 0;
}

贪心 【1-5】

模拟 【1-3】

二分 【2-5】

 int l=0,r=1e5;
     
 int mid=l+r>>1;
 while(l<r){
     if(左边的区间不符合条件) l=mid+1;
     else r=mid;
 }
 ​
 int mid=l+r+1>>1;
 while(l<r){
     if(左边区间不符合条件) l=mid;
     else r=mid-1;
 }

DP(普通一维问题) 【3-5】

高精度 【1-5】

数据结构

栈 【2-4】

队列 【2-5】

链表 【2-5】

数学

初等数论 【3-5】

大学B组

1.排序

(1)归并排序[4-5] (2)快速排序[4-5] (3)桶排序[4] (4)堆排序[4] (5)基数排序[4~5]

2.搜索

(1)剪枝[4-6] (2)双向 BFS[5-6] (3)记忆化搜索[5] (4)迭代加深搜索[5-6] (5)启发式搜索[7]

3.DP

(1)背包 DP[4-6] (2)树形 DP[4-6] (3)状压 DP[5-6] (4)数位 DP[5-6] (5)DP 的常见优化[7]

4.字符串

(1)哈希[4-5] (2)kmp[4-6]

(3)manacher[4-6]

5.图论

(1)欧拉回路[5-7] (2)最小生成树[5-7] (3)单源最短路及差分约束系统[5-7] (4)拓扑序列[5-7] (5)二分图匹配[7] (6)图的连通性问题(割点、桥、强连通 分量)[7] (7)DFS 序[5-7] (8)最近共同祖先[5-7]

6.数学

(1)排列组合[5-6] (2)二项式定理[6] (3)容斥原理[6-7] (4)模意义下的逆元[5] (5)矩阵运算[6-7] (6)高斯消元[7]

7.数据结构

(1)ST 表[5-6] (2)堆[5-6] (3)树状数组[5-6] (4)线段树[6-7] (5)Trie 树[5-7] (6)并查集[5-6] (7)平衡树(利用系统自带的标准库实现简 单平衡树)[5-7]

8.计算几何

(1)基础计算和基本位置关系判定[6-7] (2)概率论[7+] (3)博弈论[7+]

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值